当我正在寻找一种实现分页功能的方法时,我想介绍一种从头开始编写代码的方法,以及另一种使用包来实现它的方法。
环境
- ASP.NET Core 2.2
- ASP.NET Core MVC
- 引导程序4
- Visual Studio 2019
- X.PagedList.Mvc.Core7.9.0(NuGet包)
假定商店管理功能将在已注册商店的列表页面上实现分页功能。
编写和实现1
中的代码
参考站点
向学生/索引添加分页(Microsoft)
1.创建用于分页
的新类
PaginatedList.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace ContosoUniversity { public class PaginatedList< T > : List< T > { public int PageIndex { get; private set; } public int TotalPages { get; private set; } public PaginatedList(List< T > items, int count, int pageIndex, int pageSize) { PageIndex = pageIndex; TotalPages = (int)Math.Ceiling(count / (double)pageSize); this.AddRange(items); } public bool HasPreviousPage { get { return (PageIndex > 1); } } public bool HasNextPage { get { return (PageIndex < TotalPages); } } public static async Task<PaginatedList< T >> CreateAsync(IQueryable< T > source, int pageIndex, int pageSize) { var count = await source.CountAsync(); var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync(); return new PaginatedList< T >(items, count, pageIndex, pageSize); } } } |
2.更改索引操作方法
控制器/ ShopController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 | public async Task<IActionResult> Index(int? pageNumber) { // 「編集」「詳細」ページから戻ってくる際の?????番号保持 ViewData["pageNumber"] = pageNumber ?? 1; // ソートデータ取得用のクエリ発行 var shops = _context.Shop.Select(m => m); // 1ページ内の項目レコード表示数 int pageSize = 5; return View(await PaginatedList<Shop>.CreateAsync(shops.AsNoTracking(), pageNumber ?? 1, pageSize)); } |
3.添加分页链接
第一个模型语句中的
分页列表