我有一个页面,其中包含一个带有ActionLink的客户端列表,允许用户显示(或隐藏)“非活动”客户端。 showInactive=True
附加到url作为控制器的查询字符串。显示“非活动”客户端后,我编辑其中一个,但是当我保存任何更改或返回列表时,查询字符串消失了。在这些请求中保持查询字符串的最佳方法是什么?我已经尝试过TempData字典,但显然我试图将它用于它不能处理的东西。
答案 0 :(得分:6)
实现此目的的一种简单方法是在您的操作中添加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
,还可以保留列表中可能包含的任何其他参数,例如页码,搜索条件,排序顺序等。
答案 1 :(得分:1)
将查询字符串参数传递到您的编辑页面,并将该值添加为隐藏表单字段参数。如果它不存在,则默认为false。这样,当您执行编辑帖子并进行处理时,您可以从绑定的模型/ FormCollection / etc中提取值,并根据它的值执行具有相应查询字符串参数值的重定向。
return this.RedirectToAction("ListClients", new { showInactive = *INSERT THE VALUE* });
转换为
/CurrentController/ListClients?showInactive=*value*