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"))

posted on   白马酒凉  阅读(140)  评论(0编辑  收藏  举报

编辑推荐:
· 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 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示