您当前的位置: 首页 >  .net

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用 ASP.NET Core Razor 页、Web API 和实体框架进行分页和排序

寒冰屋 发布时间:2021-02-09 20:19:45 ,浏览量:0

目录

核心类

数据层

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

关注
打赏
1665926880
查看更多评论

最近更新

热门博客

立即登录/注册

微信扫码登录

0.0927s