【发布时间】:2013-11-25 09:10:22
【问题描述】:
我正在尝试根据类别过滤器和 ItemsPerPage 显示经过过滤的产品列表,但在尝试将其与 PagedList 一起使用时遇到了一些问题。
如果我需要编写自己的分页代码,或者有没有办法使用 PagedList 获得所需的结果,具有 PagedList 专业知识的人可以建议我。
我正在使用 LINQ 的 Skip & Take 函数来仅获取需要在当前页面上显示的行数,但我仍然希望分页链接根据过滤器的总数显示页面。
例如: 我的搜索过滤器找到 50 个结果,但由于我每页的行数是 10 个项目,所以我使用 LINQ 的 Skip() 和 Take() 只返回 10 行。我仍然需要在我的 View.cshtml 中显示页面链接 > 现在使用默认的 PagedList,我只得到 >,我知道为什么我只看到一个页面,但只是想知道如何让它显示正确数量的页面链接,而只得到结果的一个子集。
**我的目标是将优化的查询写入数据库,以便网页响应性能更快。
这是我的 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));
}
这是视图中处理分页的代码 sn-p。我查看了项目的 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>
【问题讨论】:
-
你有没有得到这个答案?我有同样的问题,我没有看到自己检索所有记录,以便我们可以显示正确的寻呼号码。请告诉我
-
您好 Johnny,答案是自定义过滤,您需要编写自己的代码来处理分页。 PagedList 是一个很棒的分页库,但它不提供过滤和仅返回子集以优化大量数据。
-
那么实现这一目标的最终答案是什么????
标签: c# linq asp.net-mvc-4 pagination pagedlist