目录
核心类
数据层
The API
Razor页面
如何使用 .NET Core Razor 页、Web API 和实体框架实现分页和排序,以产生良好的性能。
该项目的特点是:
- 选择页面大小(Page Size)
- 页面导航
- 显示记录编号
- 列的排序
您可以在这里查看此项目的源和最新更新。
https://www.youtube.com/embed/FYeTPTMCW-k?feature=oembed
核心类第一件事是定义用户可以要求应用程序获取什么:
- 页面大小(Page Size)
- 页号
- 要排序的字段
- 排序方向
代码如下所示:
public class PageSortParam
{
public int PageSize { get; set; } = 10; //default page size
public int CurrentPage { get; set; } = 1;
public string SortField { get; set; } = null;
public SortDirection SortDir { get; set; }
}
public enum SortDirection
{
Ascending = 0, //default as ascending
Decending
}
接下来,我们定义应用程序应返回的,如下所示:
- 记录总数
- 页数总数
- 上一页编号 —— 用于用户导航到上一页时
- 下一页编号 —— 用于导航到下一页
- 当前页面上的第一个记录编号
- 当前页面上的最后一个记录编号
代码如下所示:
public class PageSortResult
{
public int TotalCount { get; set; } = 0;
public int TotalPages { get; set; } = 1;
public int? PreviousPage { get; set; }
public int? NextPage { get; set; }
public int FirstRowOnPage { get; set; }
public int LastRowOnPage { get; set; }
}
通过定义用户参数和结果,我们创建从List继承的PageList类,以便我们可以将结果存储在List中。类将接受参数并查找结果。
下面的代码显示了GetData()方法中所需的逻辑。从数据库获取记录的行是对ToListAsync()的调用,它将通过调用Skip()跳过不需要的记录,并且仅通过调用Take()获取所需的记录:
public class PageList : List
{
public PageSortParam Param { get; }
public PageSortResult Result { get; }
public PageList(PageSortParam param)
{
Param = param;
Result = new PageSortResult();
}
public async Task GetData(IQueryable query)
{
//get the total count
Result.TotalCount = await query.CountAsync();
//find the number of pages
Result.TotalPages = (int)Math.Ceiling(Result.TotalCount / (double)Param.PageSize);
//find previous and next page number
if (Param.CurrentPage - 1 > 0)
Result.PreviousPage = Param.CurrentPage - 1;
if (Param.CurrentPage + 1 m.PageSize, Model.PageSizeList,
"-Select-", new { onchange = "submit()" })
Customer ID
First Name
Last Name
@foreach (var c in Model.CustomerList)
{
@c.CustomerId
@c.FirstName
@c.LastName
edit
delete
}
@{
var prev = Model.PageSortResult.PreviousPage.HasValue ? "" : "disabled";
var next = Model.PageSortResult.NextPage.HasValue ? "" : "disabled";
var first = Model.PageNumber != 1 ? "" : "disabled";
var last = Model.PageNumber != Model.PageSortResult.TotalPages ? "" : "disabled";
}
first_page
chevron_left
Page @Model.PageNumber of @Model.PageSortResult.TotalPages
chevron_right
last_page
就这些!希望您发现这在构建分页和排序应用程序时很有用。
https://www.codeproject.com/Articles/5292061/Paging-and-Sorting-using-ASP-NET-Core-Razor-Page-W