对我来说,试图解决这一问题已经漫长了一天,我相信 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为类别