ASP.NET Core 列表页帮助页

 [HtmlTargetElement("CustomPager")]
    public class CustomPagerTagHelper : TagHelper
    {

        public CustomPagerTagHelper()
        { 
        
        }

        /// <summary>
        /// 数据总数,默认为0条
        /// </summary>
        public int Total { get; set; } = 0;

        /// <summary>
        /// 当前页码,默认第一页
        /// </summary>
        public int PageIndex { get; set; } = 1;

        /// <summary>
        /// 每页记录数,默认20条
        /// </summary>
        public int PageSize { get; set; } = 20;

        /// <summary>
        /// 当前页路由
        /// </summary>
        public string RouteUrl { get; set; }

        /// <summary>
        /// 当前页的查询条件
        /// </summary>
        public string Query { get; set; }
          
        /// <summary>
        /// 共多少页
        /// </summary>
        public int PageTotal
        {
            get
            {
                int mainPageCount = Total / PageSize;
                if (Total % PageSize > 0)
                {
                    return mainPageCount + 1;
                }
                return mainPageCount;
            }
        }

        private string SetQueryString()
        {
            var result = new List<string>();
            if (!string.IsNullOrWhiteSpace(Query))
            {
                if (Query.StartsWith("?"))
                {
                    Query = Query.Remove(0, 1);
                }

                string[] paramList = Query.Split('&');
                foreach (var param in paramList)
                {
                    var paramName = param.Trim().ToLower();
                    if (!paramName.StartsWith("pageindex=") && !paramName.StartsWith("pagesize="))
                    {
                        result.Add(param);
                    }
                }
                // 用LINQ遍历
                // result = paramList.Where(p => !p.ToLower().StartsWith("pageindex=") && !p.ToLower().StartsWith("pagesize=")).ToList();
            }
            result.Add("pageIndex={0}");
            result.Add("pageSize=" + PageSize.ToString());
            return "?" + string.Join('&', result);
        }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "div";
            output.Attributes.Add("class", "my-pager");

            output.PreContent.SetContent($" 共有 {Total} 条记录,每页 {PageSize} 条记录。共 1000 页,当前第 {PageIndex} 页。 ");

            if (PageSize <= 0) { PageSize = 20; }
            if (PageIndex <= 0) { PageIndex = 1; }
            if (Total <= 0) { return; }

            //总页数
            var totalPage = Total / PageSize + (Total % PageSize > 0 ? 1 : 0);
            if (totalPage <= 0) { return; }

            Query = SetQueryString();

            //构造分页样式
            var sbPage = new StringBuilder(string.Empty);

            sbPage.Append("<ul class=\"pagination\">");
            sbPage.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}{1}\">首页</a></li>",
                RouteUrl,
                string.Format(Query, 1)
            );

            // 计算显示的页码
            int start = 1;
            int end = totalPage;
            bool hasStart = false;
            bool hasEnd = false;

            if (totalPage > 10)
            {
                if (PageIndex > 5)
                {
                    start = PageIndex - 4;
                    hasStart = true;
                }

                if (start + 9 < totalPage)
                {
                    end = start + 9;
                    hasEnd = true;
                }
                else
                {
                    end = totalPage;
                    start = totalPage - 9;
                }
            }

            if (hasStart)
            {
                sbPage.AppendFormat("<li class=\"page-item\"><a href=\"{0}{1}\">...</a></li>",
                    RouteUrl,
                    string.Format(Query, start - 1)
                );
            }

            for (int i = start; i <= end; i++)
            {
                sbPage.AppendFormat("<li {1}><a class=\"page-link\" href=\"{2}{3}\">{0}</a></li>",
                    i,
                    i == PageIndex ? "class=\"page-item active\"" : "class=\"page-item\"",
                    RouteUrl,
                    string.Format(Query, i)
                );
            }

            if (hasEnd)
            {
                sbPage.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}{1}\">...</a></li>",
                    RouteUrl,
                    string.Format(Query, end + 1)
                );
            }

            sbPage.Append("<li class=\"page-item\">");
            sbPage.AppendFormat("<a class=\"page-link\" href=\"{0}{1}\">",
                                RouteUrl,
                                string.Format(Query, totalPage));
            sbPage.Append("尾页");
            sbPage.Append("</a>");
            sbPage.Append("</li>");
            sbPage.Append("</ul>");
            output.Content.SetHtmlContent(sbPage.ToString());
        }
    } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74456535

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值