【问题标题】:Browser back button does not populate dropdowns value in MVC application浏览器后退按钮不填充 MVC 应用程序中的下拉列表值
【发布时间】:2015-07-30 20:27:54
【问题描述】:

我有一个用 C# 在 MVC5 中构建的应用程序。我的视图中有 5 个下拉菜单。

这些下拉菜单是部分视图。 下拉菜单的内容:-

1) 城市列表

2) 事件列表。

3) 场地列表

4) 日期列表

5) 时间列表

所以当页面首次加载时,城市就会被填充。当我选择一个城市时,第二个下拉列表会填充事件列表。现在,当我选择一个事件时,下一个下拉列表将填充场地。并且所有下拉菜单都会发生相同的过程。(当然,最后一次下拉菜单没有更改事件)。

现在有一个提交按钮,当我单击此按钮时,它使用控制器方法将我重定向到新页面。签名如下

public ActionResult Redirect(string hdn_city, string hdn_event, string hdn_date, string hdn_venue, string hdn_time)  
{
    string urls = String.Format("mysite.com?cid={0}&eid={1}&did={2}&vid={3}&tid={4}", hdn_city, hdn_event, hdn_date,hdn_venue,hdn_time);             
    return Redirect(urls);
}

现在,当我提交此表单时,我被重定向到 mysite.com,所有参数都在查询字符串中传递。

现在我的问题是,如果在到达 mysite.com 后按下浏览器后退按钮,下拉列表的值应该保持不变。我不必再重复整个过程。请建议我可能的替代方案。

【问题讨论】:

    标签: c# asp.net asp.net-mvc partial-views


    【解决方案1】:

    您可以使用 Cookie 或 TempData 或 History Javascript(仅限 Html5)。 或者您可以在最后创建一个 PostBack 以在浏览器中保存价值。

    您可以只保存选定的值,并重新加载关联数据。

    这样的回传: <form action="thispage.aspx?dropdownvalue1=***&dropdownvalue2=**"></form>.

    【讨论】:

      【解决方案2】:

      我能想到的最简单的方法是使用查询字符串来存储选定的值。 例如。当你选择一个城市时,重定向到

      /selectionPage?city=selectedCity

      然后,在选择事件时,重定向到

      /selectionPage?city=selectedCity&event=selectedEvent

      等等。 这样,您将在查询字符串中拥有所有选定的值,因此在浏览器历史记录中向后/向前移动将按原样工作。

      【讨论】:

      • 我把断点放在控制器的动作方法上。但是当我使用浏览器后退按钮时,没有命中断点。
      • 因为浏览器缓存。您可以为特定操作禁用它(使用操作属性,请参阅here)。但是你为什么要这样做呢?如果页面是无状态的(即,下拉值是根据查询字符串填充的),则可以将其缓存。
      • 感谢亚历山大·苏加克。我想我需要以某种方式使用查询字符串。我正在等待任何可以帮助我避免这种情况的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2021-05-20
      相关资源
      最近更新 更多