asp.net core 2.0 mvc 中的分页系统

Pagination system in asp.net core 2.0 mvc

我想为我的项目创建一个包含列表的所有页面的通用分页组件。

我曾经使用过时的网络表单,但我不确定 asp.net mvc 核心中的最佳实践。

我已经阅读了来自 Microsoft 的这份很棒的文档:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page#add-paging-functionality-to-the-students-index-page

我已经将 PaginatedList class 放入我的项目中。

一切正常。

但我想在部分视图中放置 html 用于分页的内容(以便分解 html 代码):

@model PaginatedList<T>

@{
    var prevDisabled = !Model.HasPreviousPage ? "disabled" : "";
    var nextDisabled = !Model.HasNextPage ? "disabled" : "";
}

<a asp-action="Index"
   asp-route-param1="@ViewData["param1"]"
   asp-route-page="@(Model.PageIndex - 1)"
   class="btn btn-default @prevDisabled">
    Previous
</a>
<a asp-action="Index"
   asp-route-param1="@ViewData["param1"]"
   asp-route-page="@(Model.PageIndex + 1)"
   class="btn btn-default @nextDisabled">
    Next
</a>

然后,我想把这一行放在每个列表页面的底部:

@Html.Partial("~/Views/Shared/_pagination.cshtml", Model)

我有两个问题:

谢谢

有点老问题了,但是...我用它来渲染顶部和底部的部分:

 @await Html.PartialAsync("_pagination.cshtml")

然后在您的 _pagination.cshtml 页面中使用与主页面相同的模型:

 @model youproject.Pages.yourpageModel;

.....

@{
    var prevDisabled = !Model.PaginatedInventory.HasPreviousPage ? "disabled" : "";
    var nextDisabled = !Model.PaginatedInventory.HasNextPage ? "disabled" : "";
    var SortOrderDir = Model.CurrentSortDir;
    var numberOfPages = Model.PaginatedInventory.TotalPages;
    var CurrentPageIndex = Model.PaginatedInventory.PageIndex;


    int CurrentLimit = Model.IntegerCurrentLimit;
    int start = ((CurrentPageIndex - 7) > 0) ? CurrentPageIndex - 7 : 0;
    int end = ((CurrentPageIndex + 7) < numberOfPages) ? CurrentPageIndex + 7 : numberOfPages;

}

等...页面模型(yourpagemodel.cs 文件)创建 "PaginatedInventory":

public PaginatedList<InventoryItem> PaginatedInventory { get; set; }

...

  PaginatedInventory = await PaginatedList<InventoryItem>.CreateAsync(
                Items,CurrentPageIndex, IntegerCurrentLimit);

该类型已在模型中定义。