.NET 文章分页

时间:2015/12/2 14:57:00来源:互联网 作者:flyso 点击: 911 次

发现在文章细览页面文字过长便会出现页面严重拉长的现象,为了解决此问题,应当对本页面的文章进行分页控制,写出来代码与大家分享:

  /**//// <summary>
     /// 长内容分页 哈希表需要引用命名空间System.Collections
     /// </summary>
     /// <param name="n_content">新闻内容</param>
     /// <param name="page">是新闻当前页数</param>
     /// <param name="size">每页显示字符长度</param>
     /// <param name="linkurl">页码链接地址</param>
     /// <returns></returns>
     public System.Collections.Hashtable SeparatePages(string n_content, string page, int size,string linkurl)
     {
         //在此处放置初始化页的用户代码
         System.Collections.Hashtable returnHash = new System.Collections.Hashtable();
         int start, stops, t, stat, pp, pagecount, pagesize;
         string pa, articletxt, articletext, html;
         int pig = 0;

         //变量初始值
         stat = 0;
         start = 0; //开始查询的字符串位置,初始为0
         stops = 0;
         pagesize = size;//定义每页至少显示字符串数
         pagecount = 0;
         html = "";

         //获得当前的页数
         pa = page;
         if (pa == "" || pa == null)
         {
             pa = "1";
         }
         pp = Convert.ToInt32(pa);

         //获得内容
         articletxt = n_content;

         //判断页面的内容长度是否大于定义的每页至少显示字符串数
         if (articletxt.Length >= pagesize) // 如果大于字符串数,则我们可以分页显示
         {
             t = articletxt.Length / pagesize; //获得大致的总页数
             for (int j = 0; j <= t; j++)
             {    //如果查询开始位置到查询的范围超出整个内容的长度,那么就不用寻找断点(分页点);反之,查找
                 if (start + pagesize < articletxt.Length)
                 {
                     stat = articletxt.ToLower().IndexOf("</p>", start + pagesize); //查找</P>分页点的位置
                     if (stat == -1)
                         stat = articletxt.ToLower().IndexOf("<br>", start + pagesize); //查找</P>分页点的位置
                     if (stat == -1)
                         stat = articletxt.ToLower().IndexOf("<br/>", start + pagesize); //查找</P>分页点的位置
                 }
                 if (stat <= 0)//如果找不到
                 {

                 }
                 else
                 {
                     stops = stat; //分页点的位置也就作为这一页的终点位置

                     if (start < articletxt.Length)
                     {
                         if ((articletxt.Length - start) < pagesize)
                         {
                             if (pig == 0)
                             {
                                 pagecount = pagecount + 1;
                             }
                             pig = 1;
                         }
                         else
                         {
                             pagecount = pagecount + 1;
                         }
                     }
                     if (start + pagesize >= articletxt.Length) //如果起始位置到查询的范围超出整个内容的长度,那么这一页的终点位置为内容的终点
                     {
                         stops = articletxt.Length;
                     }
                     if (pp == j + 1) //如果是当前,那么输出当前页的内容
                     {
                         articletext = articletxt.Substring(start, stops - start); //取内容的起始位置到终点位置这段字符串输出
                         returnHash["content"] = articletext;
                     }
                     start = stat; //将终点位置作为下一页的起始位置
                 }
             }// pagecount = pagecount - 1;
         }
         else
         {
             returnHash["content"] = n_content;
         }
         //分页部分(这里就简单多了)
         //定义分页代码变量
         if (pagecount > 1) //当页数大于1的时候我们显示页数
         {
             if (pp - 1 > 0) //显示上一页,方便浏览
             { html = html + "<a href=\"" + linkurl + "&page=" + (pp - 1) + "\">[上一页]</a> "; }
             else
             {
                 if (pp == 1)
                 { html = html + "[<font color=#cccccc>上一页</font>] "; }
                 else
                 { html = html + "<a href=\"" + linkurl + "&page=\"" + (1) + "\">[上一页]</a> "; }
             }
             for (int i = 1; i <= pagecount; i++)
             {
                 if (i == pp)   //如果是当前页,加粗显示
                 { html = html + "<b>[" + i + "]</b> "; }
                 else
                 { html = html + "<a href=\"" + linkurl + "&page=" + i + "\">[" + i + "]</a> "; }
             }
             if (pp + 1 > pagecount)   //显示下一页,方便浏览
             {
                 if (pp == pagecount)
                 { html = html + "[<font color=#cccccc>下一页</font>] "; }
                 else
                 { html = html + "<a href=\"" + linkurl + "&page=" + (pagecount) + "\">[下一页]</a></p>"; }
             }
             else
             {
                 html = html + "<a href=\"" + linkurl + "&page=" + (pp + 1) + "\">[下一页]</a></p>";
             }
         }
         returnHash["pagetxt"] = html;
         return returnHash;
     }


调用方法:
/// <summary>
/// 长内容分页 哈希表需要引用命名空间System.Collections
/// </summary>
/// <param name="n_content">新闻内容</param>
/// <param name="page">是新闻当前页数</param>
/// <param name="size">每页显示字符长度</param>
/// <param name="linkurl">页码链接地址</param>
/// <returns></returns>
SeparatePages(string n_content, string page, int size,string linkurl) 


Copyright © 2005 - 2016 flyso.cn. 飞搜 版权所有 鄂ICP备11002783号-3