1

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

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

抱歉,这方面的新手。谢谢

4

3 回答 3

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 })

现在,当您通过详细信息页面时,您应该保持您的状态。

于 2014-03-31T20:57:38.733 回答
1

按照本教程,我实现它的方式如下:

  • 确保您的过滤器出现在您的 URL 中。对于我的索引视图中的过滤器表单,我使用 Html.BeginForm 帮助器并将 GET 指定为表单的 PostMethod。
  • 在我的创建/删除/更新操作中,我创建了一个包含引用 URL (Request.UrlReferrer) 的 ViewBag。我使用此 ViewBag 创建指向上一页的链接

    href="@ViewBag.ReturnURL"

祝你好运!

于 2015-03-24T10:47:13.217 回答
0

另一种方法是使用会话变量,这样就不必人为地传递东西了。

于 2014-11-04T15:08:07.993 回答