使用VS2013,MVC 5和pagedlist 1.17.0.0,在索引页面上,我可以翻阅数据,添加过滤器,并继续浏览数据而不会出现问题。当我执行创建,编辑,详细信息或删除时,它总是删除我的过滤器,并将我返回到第1页上的第1条记录。如何保留当前的过滤器以及我在分页列表中的位置?
示例,在日期排序的费用列表中,我在year = 2003上设置了一个过滤器。我在2003年费用列表的第4页上。我查看一条记录的详细信息,当我返回列表时,我又回到2014年第一页费用(按日期降序排序) - 我丢失了过滤器和我所在的页面( 2003年第4页。
对不起,新来的。感谢
答案 0 :(得分:3)
我目前正在为复杂的过滤器寻找一种完全可通用的方法,但这里是我用于简单过滤器的东西(看起来就像你现在正在做的那样)。
将值添加到详细信息记录的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 })
现在,您应该在通过详细信息页面时保持状态。
答案 1 :(得分:1)
我在this tutorial之后实现它的方式如下:
在我的创建/删除/更新操作中,我创建了一个包含Referrer URL(Request.UrlReferrer)的ViewBag。我用这个ViewBag来创建 使用
指向上一页的链接HREF = “@ ViewBag.ReturnURL”
答案 2 :(得分:0)
另一种方法是使用会话变量,然后不必人为地传递内容。