我正在研究ASP.NET Core项目,并将项目更新为.NET Core 2.2后,出现了分页问题。我正在使用X.PagedList库。 我认为页面数正确,但是问题是,例如,当我尝试访问第二个页面时,该页面未在查询字符串中发送。 这是我在视图中的代码:
@Html.PagedListPager((IPagedList)Model.Products,
page => Url.Action("ProductsByCategory",
new { Model.CategoryId, page, Model.SubCategoryId }),
new PagedListRenderOptions()
{
UlElementClasses = new List<string> { "pagination"},
LiElementClasses = new List<string> { "page-item", "page-link"}
})
这是我在服务中的代码:
public AllProductsViewModel GetProductsByCategory(Guid categoryId, int? page, Guid? subCategoryId = null)
{
var products = dbContext.Products
.Where(p => p.CategoryId == categoryId && p.IsAvailable)
.To<ProductViewModel>()
.ToList();
if (subCategoryId != null)
{
products = products.Where(p => p.SubCategoryId == subCategoryId).ToList();
}
var nextPage = page ?? 1;
var allProducts = new AllProductsViewModel()
{
CategoryId = categoryId,
SubCategoryId = subCategoryId,
Products = products.ToPagedList(nextPage, 9)
};
return allProducts;
}
答案 0 :(得分:1)
在.Net Core 2.2中使用X.PagedList似乎是一个错误,请检查github上的相关线程:
https://github.com/dncuug/X.PagedList/issues/131
因此,请尝试使用pageNumber
而非page
作为解决方法。
答案 1 :(得分:0)
问题出在asp.net core 2.2构造URL的方式上。默认情况下,它现在会检查应用程序中是否有匹配的端点,如果没有,则不会输出href。
Routing differences between asp.net core 2.2 and earlier versions
我已经被使用查询字符串?page的搜索引擎索引过的页面,并且我不想包含301来将?page重定向到?pagenumber。
相反,在启动时有一个选项可以覆盖此行为,并允许X.PagedList仍使用page而不是pagenumber来工作。
在添加MVC的位置禁用端点路由功能:
opt.EnableEndpointRouting = false
services.AddMvc(opt => opt.EnableEndpointRouting=false)
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);