【问题标题】:Pagination system in asp.net core 2.0 mvcasp.net core 2.0 mvc中的分页系统
【发布时间】:2018-05-14 22:03:58
【问题描述】:

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

我曾经使用过老式的网络表单,但我不确定使用 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 可以是我项目的任何实体”的好语法。我尝试放object而不是T,但它不起作用。

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

谢谢

【问题讨论】:

  • 我不认为剃须刀页面可以做到这一点。虽然它们与旧的 Web 表单有一些相似之处,但它们实际上是 MVC 视图和控制器的简化包装器。您将需要使用页面参数调用 OnGet 函数或修改代码以使用 AJAX

标签: razor-pages asp.net-core-mvc-2.0


【解决方案1】:

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

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

模型中已经定义了类型。

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    相关资源
    最近更新 更多