asp.net core下一個簡單的分頁技術


在做web應用的時候免不了要對數據進行分頁,我最近在做asp.net core的開發的時候就遇到了這個需求,現在簡單的記錄一下:

 public class PaginatedList<T>:List<T>
    {
        /// <summary>
        /// 當前頁
        /// </summary>
         public int PageIndex { get; set; }
        //總頁面數
        public int TotalPages { get; set; }


        public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
        {
            PageIndex = pageIndex;

            TotalPages = (int)Math.Ceiling(count / (decimal)pageSize);

            this.AddRange(items);
        }
        /// <summary>
        /// 判斷是否有上一頁
        /// </summary>
        public bool HasPreViousPage => (PageIndex > 1);
        /// <summary>
        /// 判斷是否有下一頁
        /// </summary>
        public bool HasNextPage => PageIndex < TotalPages;
        /// <summary>
        /// 創建分頁
        /// </summary>
        /// <param name="source">實體信息</param>
        /// <param name="pageIndex">當前頁</param>
        /// <param name="pageSize">當前頁數據條數</param>
        /// <returns></returns>
        public static async Task<PaginatedList<T>> CreatepagingAsync(IQueryable<T> source,int pageIndex,int pageSize)
        {
            //返回實體總條數
            var count = await source.CountAsync();

            var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();

      var dtos=new PaginatedList<T>(items,count,pageIndex,pageSize);
            return dtos;
        }


    }

主要的知識點:

①這個類表示一個分頁,將與分頁有關的內容集成到單個類中,符合單一職責原則

②PageIndex記錄當前頁,TotalPages記錄總的頁數,在構造函數執行的時候,會傳入必要的參數來初始化這些字段,構造函數的方法簽名為(List<T> items, int count, int pageIndex, int pageSize)不難看出,傳入的pageindex參數來初始化當前頁,這個pageindex參數肯定是由頁面來傳入的,pageSize是自定義的一個數據,你想讓一個頁面顯示多少條記錄,就定義成多少。還有一個List<T>類型的item,由這個傳入的參數來確定item的總條數(item.Count()),然后由了總的條數和每頁的條數就可以得出總的頁數。

③在CreatepagingAsync這個方法中會返回一個構造好的分頁類。具體看代碼注釋


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM