我正在尝试根据类别过滤器和 ItemsPerPage 显示经过过滤的产品列表,但是在尝试将其与 PagedList 一起使用时遇到了一些问题。
如果我需要编写自己的分页代码,或者有没有办法使用 PagedList 获得所需的结果,具有 PagedList 专业知识的人可以建议我。
我正在使用 LINQ 的 Skip & Take 函数来仅获取需要在当前页面上显示的行数,但我仍然希望分页链接根据过滤器的总数显示页面。
例如:我的搜索过滤器找到 50 个结果,但由于我每页的行数是 10 项,我使用 LINQ 的 Skip() 和 Take() 只返回 10 行。我仍然需要在我的 View.cshtml 中显示页面链接<< 1 | 2 | 3 | 4 | 5 >> 现在使用默认的 PagedList,我只得到<< 1 >>,我知道为什么我只看到一个页面,但只是想知道如何让它显示正确数量的页面链接,同时只获得一个子集结果。
**我的目标是将优化的查询写入数据库,以便网页响应性能更快。
这是我的 Action Method 代码的样子。代码得到了正确的结果,但分页没有按照我的需要工作:
public ViewResult List(int page =1, string category =null)
{
if (category != null) this.CurrentCategory = category;
var products = repository.Products
.Where(p => this.CurrentCategory == null || p.Category == this.CurrentCategory)
.OrderBy(p => p.ProductID)
.Skip((page -1) * PageSize)
.Take(PageSize);
return View(products.ToList().ToPagedList(page, PageSize));
}
这是视图中处理分页的代码片段。我查看了项目的 Github 站点,但找不到提供自定义页面的扩展方法。我认为它只会根据“每页项目”和@Model 中产品的 Count() 呈现页面数:
@model IPagedList<Product>
//foreach loop that renders the @Model
//Code that displays the pagination using PagedList
<div style="text-align:center">
@Html.PagedListPager(Model, page => Url.Action("List", new { page = page, category = ViewBag.CurrentCategory }), PagedListRenderOptions.OnlyShowFivePagesAtATime
)
</div>