asp.net-mvc – ASP.NET MVC:保持最后一页状态
情况就是这样:我有一个SearchPage,用户可以进行复杂的搜索.没什么不寻常的.显示结果后,用户可以选择其中一个并移动到另一个页面(如主/细节).
我有一个breacrumb,它拥有用户所在的地方,并且它可以有超过4个级别(如Main – > 2Page – > 3Page – > 4Page – > NPage).我想要的是在我的复杂搜索页面上保持每个控件的状态,如果用户使用breacrumb向后导航,因为我不希望他们再次手动设置所有这些搜索过滤器. 到目前为止,我一直在使用javascript:history.back(),但由于我的breadcrumb上可以有多个级别,所以这不是很有用.我正在考虑使用OutputCache来做,但我不知道如何继续. UPDATE 我刚刚和一位同事谈过,他告诉我,我们的一些组合框(下拉列表)是动态生成的.因此,如果用户在第一个组合框上选择一个项目,则第二个组合将填充与第一个组合相关的数据. 解决方法
OutputCache将缓存每个用户的结果.为什么不尝试将信息存储在带有页面URL和过滤器信息的cookie中.每次执行操作时,请读取cookie并使用找到的值填充模型(搜索的自定义模型)(如果它们与页面URL匹配,则在此情况下执行操作).将模型传递给视图,然后重新填充搜索条件文本框和复选框.
更新: 假设您的用户可以输入以下信息: 有一个名为SearchCriteria的模型定义为: public class SearchCriteria { public string Criteria { get; set; } public DateTime? StartDate { get; set; } public DateTime? EndDate { get; set; } } 你的行动看起来像这样: [HttpGet] public ViewResult Search() { SearchCriteria criteria = new SearchCriteria(); if (Request.Cookies["SearchCriteria"] != null) { HttpCookie cookie = Request.Cookies["SearchCriteria"]; criteria.Criteria = cookie.Values["Criteria"]; criteria.StartDate = cookie.Values["StartDate"] ?? null; criteria.EndDate = cookie.Values["EndDate"] ?? null; } return View(criteria); } [HttpPost] public ActionResult Search(SearchCriteria criteria) { // At this point save the data into cookie HttpCookie cookie; if (Request.Cookies["SearchCriteria"] != null) { cookie = Request.Cookies["SearchCriteria"]; cookie.Values.Clear(); } else { cookie = new HttpCookie("SearchCriteria"); } cookie.Values.Add("Criteria",criteria.Criteria); if (criteria.StartDate.HasValue) { cookie.Values.Add("StartDate",criteria.StartDate.Value.ToString("yyyy-mm-dd")); } if (criteria.EndDate.HasValue) { cookie.Values.Add("EndDate",criteria.EndDate.Value.ToString("yyyy-mm-dd")); } // Do something with the criteria that user posted return View(); } 这是某种解决方案.请理解我没有对此进行测试,而是从头顶编写.它旨在让您了解如何解决此问题.您可能还应该向SearchCriteria添加Action,以便您可以检查这是否是您将读取cookie的适当操作.此外,读取和写入cookie应该移动到单独的方法中,以便您可以从其他操作中读取它. 希望这可以帮助, Huske (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何从mvc中的控制器中设置隐藏字段的值
- asp.net-mvc – ASP.NET MVC中的视图文件/目录结构应该是什
- asp.net-mvc – 具有DateTime的MVC 3编辑器模板
- asp-classic – Classic ASP中的Response.Flush导致TIME_WA
- asp.net-web-api – 从OWIN中间件更改响应对象
- ASP.NET MVC应用程序如何严重依赖于System.Web程序集?
- asp.net-mvc – 会员提供商中的GetAllUsers在哪里?
- 将ASP.NET源代码与已编译的Web应用程序匹配
- asp.net-mvc-3 – 没有表单身份验证的AntiForgeryToken
- asp.net-mvc – MVC Tag助手无法正常工作
- asp.net-mvc – 如何在razor中添加角度标签到htm
- 如何在ASP.NET中的dropdownlist控件中处理长文本
- asp.net – 清除Repeater Vb.net中的所有行
- asp.net – 停止在每次构建时创建和删除app_offl
- asp.net-mvc – 如何在特定的mvc3控制器/动作中授
- Chrome F12调试工具常用技巧
- .net – ANTS Memory Profiler – 我应该关注哪个
- asp.net – 自动修复与’ASPStateTempSessions’
- ASP.NET jQuery 实例13 原创jQuery文本框字符限制
- asp.net 禁用viewstate在web.config里