随笔 - 81  文章 - 0  评论 - 514  阅读 - 41万

自己写一个分页PageHelper

每次写分页导航的时候都要在html页面写一堆标签和样式,太麻烦了,所以干脆自己动手封装一个自己喜欢的类直接生成。

一、PageHelper类:

复制代码
 /// <summary>
        /// 分页导航
        /// </summary>
        /// <param name="pageNum">当前第几页</param>
        /// <param name="pageNumSum">总页数</param>
        /// <param name="url">显示的url</param>
        /// <param name="p">分页参数名</param>
        /// <param name="linCount">显示多少页</param>
        /// <returns></returns>
        public static string page(int pageNum, int pageNumSum, string url, string p, int linCount)
        {
            if (pageNum < 1) pageNum = 1;
            if (pageNum > pageNumSum) pageNum = pageNumSum;
            // a的样式 
            string aStyle = "text-decoration:none;border:1px solid #075DB3;box-sizing:border-box;margin:0  2px;padding:2px 5px;font-size:12px;";
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(string.Format("<div style='text-align:center;margin-bottom:30px;'>第<span style='color:#00ff21'>{0}</span>/{1} 页", pageNum, pageNumSum));
            sb.AppendLine(string.Format(" <a style='{0}' href='{1}?{2}={3}'>上一页</a>", aStyle, url, p, pageNum - 1 < 1 ? 1 : pageNum - 1));
            //设开始页为1
            int beginPage = 1;
            //中间页为 linCount/2
            int midPage = linCount / 2;
            if (pageNum > midPage)
            {
                beginPage = pageNum - midPage;
            }
            for (int i = 0; i < linCount; i++)
            {
                //当前页不加链接
                if (pageNum == beginPage + i)
                {
                    sb.AppendLine(string.Format("<span style='display: inline-block;width:10px;'></span>{0}<span style='display: inline-block;width:10px;'></span>", beginPage + i));
                }
                else
                {
                    sb.AppendLine(string.Format("<a style='{0}' href='{1}?{2}={3}'>{3}</a>", aStyle, url, p, beginPage + i));
                }
                //如果后面的页数大于总页数,退出循环
                if (beginPage + i >= pageNumSum)
                {
                    break;
                }

            }
            sb.AppendLine(string.Format(" <a style='{0}' href='{1}?{2}={3}'>下一页</a>", aStyle, url, p, pageNum + 1 >= pageNumSum ? pageNumSum : pageNum + 1));
            sb.Append("</div>");
            return sb.ToString();
        }
复制代码

二、演示

 这是在一个mvc项目中做的演示

   action :

复制代码
 public ActionResult Index(string page)
        {
            //1.获得当前页数
            int pageNum = 1;//默认第一页
            if(page!=null)
            pageNum = Convert.ToInt32(page);  //一些判断是否为int或者是否<0大于最大页数这里不做判断,主要演示分页效果
            //2.总页数-- 查询数据库得到总条数再计算得到总页数
            int pageNumSum = 18;//假设计算得到结果为18页
            string url = "/Demo/Index"; //当前url
            //要显示多少页
            int pageList = 5;//假设看到5页
            //mvc要 MvcHtmlString 进行生成html码,不然会是一个字符串
            ViewBag.page = new MvcHtmlString(PageHelper.page(pageNum, pageNumSum, url, "page", pageList));
            return View();
           
        }
复制代码

view:

复制代码
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <style type="text/css">
        p {
        text-align:center;
        color:#00ff21;
        }
    </style>
</head>
<body>
    <p>列表内容</p>
      <p>列表内容</p>
      <p>列表内容</p>
      <p>列表内容</p>
      <p>列表内容</p>
    <div>
        @ViewBag.page
    </div>
</body>
</html>
复制代码

效果:

 

后言:当然这主要是说一个方法,如果觉得这个不好看,你可以自己写多几个自己喜欢的分页效果类,想用哪个就调用哪个的。

posted on   包子wxl  阅读(2440)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 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

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

喜欢请打赏

扫描二维码打赏

支付宝打赏