VS - Paginated
BootstrapPagination.cshtml
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 46 47 48 49 50 51 | @model PaginationModel <div class = "pagination" > <ul> @ foreach ( var link in Model.PaginationLinks) { @BuildLink(link) } </ul> </div> @helper BuildLink(PaginationLink link) { var liBuilder = new TagBuilder( "li" ); if (link.IsCurrent) { liBuilder.MergeAttribute( "class" , "active" ); } if (!link.Active) { liBuilder.MergeAttribute( "class" , "disabled" ); } var aBuilder = new TagBuilder( "a" ); if (link.PageIndex != null ) { aBuilder.MergeAttribute( "data-page" , link.PageIndex.Value.ToString()); } if (link.Url == null ) { //aBuilder.MergeAttribute("href", "#"); } else { aBuilder.MergeAttribute( "href" , link.Url); aBuilder.AddCssClass( "paging" ); } if (link.DisplayText == "«" ) { aBuilder.SetInnerText( "←" ); } else if (link.DisplayText == "»" ) { aBuilder.SetInnerText( "→" ); } else { aBuilder.SetInnerText(link.DisplayText); } liBuilder.InnerHtml = aBuilder.ToString(); @Html.Raw(liBuilder.ToString()) } |
PaginatedList.cs
public class PaginatedList<T> : List<T> { public int Offset { get; private set; } public int PageIndex { get; private set; } public int PageSize { get; private set; } public int TotalCount { get; private set; } public int TotalPages { get; private set; } /// <summary> /// For manually paing. /// </summary> /// <param name="source">The result of current page</param> /// <param name="totalCount"></param> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> public PaginatedList(IEnumerable<T> source, int totalCount, int pageIndex, int pageSize) { Offset = pageIndex * pageSize; PageIndex = pageIndex; PageSize = pageSize; TotalCount = totalCount; TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize); this.AddRange(source); } public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) { Offset = pageIndex * pageSize; PageIndex = pageIndex; PageSize = pageSize; TotalCount = source.Count(); TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize); this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize)); } public PaginatedList(IQueryable<T> source, int pageSize, int? offset = null, int? pageIndex = null) { if (offset != null) { Offset = offset.Value; PageIndex = (int)Math.Ceiling((decimal)Offset / pageSize); } else if (pageIndex != null) { Offset = pageIndex.Value * pageSize; PageIndex = pageIndex.Value; } else { //offset = null and pageIndex = null throw new ArgumentNullException("offset and pageIndex"); } PageSize = pageSize; TotalCount = source.Count(); TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize); this.AddRange(source.Skip(Offset).Take(PageSize)); } public bool HasPreviousPage { get { return (Offset > 0); } } public bool HasNextPage { get { return (Offset + PageSize < TotalCount); } } }
public PaginatedList<classname> classnameList { get; set; }
classnameList = new PaginatedList<EventCallDetail>(classList, count, (pageIndex > 0) ? pageIndex - 1 : 0, PageSize);
@Html.Pager(PageSize, PageIndex + 1, classnameList.TotalCount).Options(o => o.DisplayTemplate("BootstrapPagination"))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!