asp.net-mvc – 如何将POST请求重定向到维护MVC中的模型值的URL
我有一个相当标准的排序/过滤器/页面搜索表单,但需要控制url的格式. sort / filter / page参数应该都是url的一部分,例如,地址可以通过电子邮件发送给某人.
添加另一个过滤器参数时,将发出POST请求.我的控制器方法如下所示: [HttpPost] public ActionResult Search(string filterField,Operator filterOperator,string filterValue,PeopleGroupSearchModel model); PeopleGroupSearchModel是从查询字符串参数填充的.过滤器*参数来自已过帐的表单值. 我想解析提供的过滤器值,然后将过滤器添加到名为Filters的模型中的集合中.然后,获取更新的模型并将其转换为适当的URL并将其作为响应传递给用户. 因此,如果它们在此页面上: PeopleGroup/Search?page=4&sort=Country …和POST: > filterField = PeopleGroupName …完成所有处理后,浏览器中的地址应为: PeopleGroup/Search?page=4&sort=Country&PeopleGroupName=Zulu&PeopleGroupName_op=Equals 所以,或多或少我想做的事情: [HttpGet] public ActionResult Search(PeopleGroupSearchModel model) { PeopleGroupData.Search(model); ViewData.Model = model; return View(); } [HttpPost] public ActionResult Search(string filterField,PeopleGroupSearchModel model) { PeopleGroupFilter filter = ParseFilter(filterField,filterOperator,filterValue); model.Filters.Add(filter); return RedirectToAction("Search",???); } 我对MVC很新,所以如果我完全以错误的方式解决这个问题,请告诉我! 解决方法
在ASP.NET MVC中有几种可能性来实现
Redirect-After-Post模式(这就是你在此之后,这是一个非常好的模式IMHO):
>使用TempData.在POST操作中将模型存储在TempData内并重定向: TempData["model"] = model; return RedirectToAction("Search"); 然后在搜索操作内部检查TempData存在以获取模型: PeopleGroupSearchModel model = TempData["model"] as PeopleGroupSearchModel; 这种方法的缺点是TempData只保留一个重定向,这意味着如果用户在搜索GET操作时遇到F5,则会被搞砸.这可以通过使用Session来缓解.但当然Session引入了另一个可扩展性问题.所以我不喜欢这种方法. return RedirectToAction("Search",new { prop1 = model.Prop1,prop2 = model.Prop2,.... }); 现在,当重定向到Search GET操作时,Default模型绑定器将能够重建模型.这种方法的一个明显缺点是,如果您的模型具有许多属性,甚至更复杂类型的性能,这很快就会成为一种麻烦的解决方案.您可以使用某些文本格式(例如JSON)作为查询字符串参数来序列化模型.当然,查询字符串参数在不同浏览器之间受到限制,所以这也可能是禁忌. int id = Persist(model); return RedirectToAction("Search",new { id = id }); 然后在GET操作中使用id从这个相同的持久性存储中检索模型.我喜欢这种方法并且大多数时候都在使用它.如果坚持上述数据存储是昂贵的,您可以使用缓存. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC – Html.DropDownList – 值未
- asp.net-mvc – LINQ匿名类型MVC视图
- asp.net-mvc – 我真的需要一个ORM吗?
- asp.net-mvc – 在我的asp.net MVC解决方案中保持脚本文件夹
- asp.net-mvc – Umbraco 4.11.3 – 控制器类型的当前请求不
- asp.net-mvc – ViewModel应该位于ASP.NET MVC应用程序的目
- asp.net – 如何为Google Chrome启用自动登录用户身份验证
- ASP.NET MVC MySql Membership Provider,用户无法登录
- asp.net – 使用Post后面的Post方法重定向到另一个页面
- asp.net-mvc-5 – WebJob和SignalR Hub之间的通信
- 在ASP.NET应用程序中使用out-of-process会话状态
- asp.net-mvc-3 – 如何在ASP.NET MVC 3中更新EF
- asp.net – 如何通过sqldatasource计算获取的行数
- 身份验证 – 错误“Membership.Provider”属性必
- asp.net-mvc – asp.net mvc – 子文件夹
- asp.net – MVC 3/4 HttpModule或ActionFilter
- asp.net-mvc – MVC 5渲染视图到字符串
- ASP.NET Web应用程序可防止拒绝服务攻击
- ASP.NET和C#页面查看计数器:使用数据库
- 单元测试后面的ASP.NET代码