对我来说,试图解决这一问题已经漫长了一天,我相信 stackoverflow 总是有一个答案。我搜索了相似的帖子,但我猜没有一个是拼命寻找的帖子。达成协议,这是我正在处理的 MVC 4 项目,但遇到一些问题,促使我将其打开。在我的MVC上使用 IPageList 进行分页非常酷,但是如何使用相同的 ActionResult 容器作为索引来分页过滤结果。这是一些可以使用的代码。

public ActionResult Index(int? page, int category = 0)
     {
         int pageSize = 10;
         int pageNumber = (page ?? 1);
         if (category != 0)
         {
             var products = (from p in db.Products where p.ProductID == category select p).OrderBy(x => x.ProductName).ToList();
             return View(products.ToPagedList(pageNumber, pageSize));
         }
         else
         {
             var products = (from p in db.Products select p).OrderBy(x => x.ProductName).ToList();
             return View(products.ToPagedList(pageNumber, pageSize));
         }
     }

基本上, int类别是从下拉列表中获得的值。它可以完美过滤,但是问题是当我过滤并且结果大于10并尝试转到下一页时,它返回到索引初始结果。对其进行调试,我意识到一旦单击了下一个,便清除了 int类别的值,并进入了else块。这是分页控件,也许有些东西需要调整...
<div>Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount

@if (Model.HasPreviousPage)
{
    @Html.ActionLink("<<", "Index", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter  })
    @Html.Raw(" ");
    @Html.ActionLink("< Prev", "Index", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter  })
}
else
{
    @:<<
    @Html.Raw(" ");
    @:< Prev
}

@if (Model.HasNextPage)
{
    @Html.ActionLink("Next >", "Index", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter  })
    @Html.Raw(" ");
    @Html.ActionLink(">>", "Index", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter  })
}
else
{
    @:Next >
    @Html.Raw(" ")
    @:>>
}

我需要的是页面上返回的过滤结果以响应分页。我将等待答案。谢谢!

最佳答案

在您的操作容器中设置ViewBag.CurrentFilter = category;,假设CurrentFilter为类别

09-26 19:10
查看更多