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)
我有两个问题:
在我的部分视图的第一行,我不知道应该输入哪种数据类型。它可能是 PaginatedList、PaginatedList 或其他任何东西。
我不知道 "Model is PaginatedList where T can be any entity of my project" 的正确语法。我试图用对象代替 T,但它不起作用。
如您所见,prev/next 链接包含其他参数 (param1)。这个参数可以是过滤器。但是这个过滤器是不一样的。有没有办法对标签说:"Copy each GET parameter you can see with its current value" ?
谢谢
有点老问题了,但是...我用它来渲染顶部和底部的部分:
@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);
该类型已在模型中定义。
我想为我的项目创建一个包含列表的所有页面的通用分页组件。
我曾经使用过时的网络表单,但我不确定 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)
我有两个问题:
在我的部分视图的第一行,我不知道应该输入哪种数据类型。它可能是 PaginatedList、PaginatedList 或其他任何东西。 我不知道 "Model is PaginatedList where T can be any entity of my project" 的正确语法。我试图用对象代替 T,但它不起作用。
如您所见,prev/next 链接包含其他参数 (param1)。这个参数可以是过滤器。但是这个过滤器是不一样的。有没有办法对标签说:"Copy each GET parameter you can see with its current value" ?
谢谢
有点老问题了,但是...我用它来渲染顶部和底部的部分:
@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);
该类型已在模型中定义。