@ Html.PagedListPager不发送查询字符串中的页面

时间:2019-02-05 19:41:07

标签: pagination asp.net-core-mvc

我正在研究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;
    }

2 个答案:

答案 0 :(得分:1)

在.Net Core 2.2中使用X.PagedList似乎是一个错误,请检查github上的相关线程:

https://github.com/dncuug/X.PagedList/issues/131

.focusin()

因此,请尝试使用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);