在创建,编辑,详细信息或删除后返回到MVC 5分页列表(包括过滤器)的同一页面

时间:2014-03-08 01:45:10

标签: asp.net-mvc filter pagedlist

使用VS2013,MVC 5和pagedlist 1.17.0.0,在索引页面上,我可以翻阅数据,添加过滤器,并继续浏览数据而不会出现问题。当我执行创建,编辑,详细信息或删除时,它总是删除我的过滤器,并将我返回到第1页上的第1条记录。如何保留当前的过滤器以及我在分页列表中的位置?

示例,在日期排序的费用列表中,我在year = 2003上设置了一个过滤器。我在2003年费用列表的第4页上。我查看一条记录的详细信息,当我返回列表时,我又回到2014年第一页费用(按日期降序排序) - 我丢失了过滤器和我所在的页面( 2003年第4页。

对不起,新来的。感谢

3 个答案:

答案 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之后实现它的方式如下:

  • 确保您的过滤器显示在您的网址中。对于我的过滤形式 索引视图我使用Html.BeginForm帮助器并指定GET作为 PostMethod的形式。
  • 在我的创建/删除/更新操作中,我创建了一个包含Referrer URL(Request.UrlReferrer)的ViewBag。我用这个ViewBag来创建 使用

    指向上一页的链接

    HREF = “@ ViewBag.ReturnURL”

祝你好运!

答案 2 :(得分:0)

另一种方法是使用会话变量,然后不必人为地传递内容。