1

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

我曾经使用过老式的网络表单,但我不确定在 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 类放入我的项目中。

一切都很好。

但我想将用于分页的 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)

我有两个问题:

  • 在我的部分视图的第一行,我不知道应该放置哪种数据类型。它可能是 PaginatedList、PaginatedList 或其他任何东西。我不知道说“模型是分页列表,其中 T 可以是我项目的任何实体”的好语法。我试图放置对象而不是 T,但它不起作用。

  • 如您所见,prev/next 链接包含其他参数(param1)。该参数可以是过滤器。但是这个过滤器不一样。有没有办法对标签说:“复制您可以看到的每个 GET 参数及其当前值”?

谢谢

4

1 回答 1

0

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

 @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);

该类型已在模型中定义。

于 2019-07-17T23:04:19.163 回答