我目前正在为复杂的过滤器寻找一种完全通用的方法,但这是我用于简单过滤器的方法(看起来就像你现在正在做的那样)。
将该值添加到您的详细信息记录的 ViewBag 中,然后将其传递回您的索引(您可能也希望为您的页面值执行此操作)。
因此,您的 Index 操作方法可能已经看起来像这样:
public ActionResult Index(int? page, string filter)
{
ViewBag.Page = page;
ViewBag.Filter = filter;
var list = // App specific magic using the filter paramter to get your list of items
return View(list.ToPagedList(page ?? 1, 25);
}
在您的索引视图中,您可能有这样的东西来链接到您的详细信息:
@Html.ActionLink("Details", Details", new {id = item.Id})
如果您将其更改为:
@Html.ActionLink("Details", Details", new {id = item.Id, page=ViewBag.Page, filter=ViewBag.Filter})
然后是您的详细信息操作方法
public ActionResult Details(int id = 0, int? page=null, string filter=null)
{
MyDetails details = // App specific magic to get a ViewModel for your details page
ViewBag.Page = page;
ViewBag.Filter = filter;
return View(details);
}
最后,在您的详细信息页面上,无论您有返回列表的链接,添加两个附加参数
@Html.ActionLink("Back to List", "Index", new { page = ViewBag.Page, filter = ViewBag.Filter })
现在,当您通过详细信息页面时,您应该保持您的状态。