发现在文章细览页面文字过长便会出现页面严重拉长的现象,为了解决此问题,应当对本页面的文章进行分页控制,写出来代码与大家分享:
/**/
/// <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;
}
/// 长内容分页 哈希表需要引用命名空间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;
}