Asp.net mvc 在MVC 3中跨请求持久化查询字符串
我有一个包含客户端列表的页面,其中包含一个ActionLink,允许用户显示(或隐藏)“非活动”客户端。Asp.net mvc 在MVC 3中跨请求持久化查询字符串,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Razor,我有一个包含客户端列表的页面,其中包含一个ActionLink,允许用户显示(或隐藏)“非活动”客户端。showInactive=True作为控制器的查询字符串附加到url。显示“非活动”客户端后,我编辑其中一个客户端,但当我保存任何更改或返回列表时,查询字符串消失。在这些请求中保持查询字符串的最佳方法是什么?我已经尝试了TempData字典,但显然我是在尝试将其用于它不适合处理的某些事情。将querystring参数传递到编辑页面,并将该值添加为隐藏的表单字段参数。如果不存在,则默认为fals
showInactive=True
作为控制器的查询字符串附加到url。显示“非活动”客户端后,我编辑其中一个客户端,但当我保存任何更改或返回列表时,查询字符串消失。在这些请求中保持查询字符串的最佳方法是什么?我已经尝试了TempData字典,但显然我是在尝试将其用于它不适合处理的某些事情。将querystring参数传递到编辑页面,并将该值添加为隐藏的表单字段参数。如果不存在,则默认为false。这样,当您执行编辑帖子并进行处理时,您可以从绑定模型/FormCollection/etc中提取值,并根据其值使用适当的querystring参数值进行重定向
return this.RedirectToAction("ListClients", new { showInactive = *INSERT THE VALUE* });
也就是说
/CurrentController/ListClients?showInactive=*value*
实现这一点的一个简单方法是在操作中添加
returnUrl
参数,如下所示:
[HttpPost]
public ActionResult Edit(int id, ClientEditModel model, string returnUrl)
{
if (!ModelState.IsValid) return View();
try
{
// do something
return Redirect(returnUrl);
}
catch
{
return View();
}
}
然后在你看来,你这样称呼你的行为:
@Html.ActionLink("Edit", "Edit", new { id = Model.Id, returnUrl = Request.RawUrl })
在此设置中,当用户完成编辑时,她将被带回到与以前完全相同的位置,不仅保留
showInactive
,还保留列表中可能包含的任何其他参数,如页码、搜索条件、排序顺序,等等。如果您向我们展示您的控制器代码,回答这个问题可能会更容易。恕我直言,您不明白我描述的哪一部分?如果你创建了一个新的MVC项目,这是默认的行为。谢谢Khepri-传递隐藏的表单字段似乎有点黑客。我希望有一个更干净的解决方案。据我所知,没有。我可以理解使用Session来持久化它,以避免传递值、将值提供给表单以及在帖子中读出值的开销,但就我个人而言,我只会传递值。