刚才做项目,要做一个列表,带翻页的,本来想偷个懒,用下其他项目的代码,想想,还是写个通用的吧。
效果预览:




话不多说,直接上代码
/// <summary>
/// 生成翻页器HTML 使用示例看https://www.yangguangdream.com/?id=2191
/// </summary>
/// <param name="currentPage">当前页</param>
/// <param name="totalPage">页总数</param>
/// <param name="pageCount">下面显示页码的数量(推荐用奇数),默认5</param>
/// <param name="url">目标页面的url,页码部分用占位符代替,如{{page}}</param>
/// <param name="urlFormat">url参数中提到的占位符,默认为{{page}}</param>
/// <param name="pageBreakClass">页码省略符的class,用于设定样式</param>
/// <param name="pageTextClass">翻页上一页下一页的class,用于设定样式</param>
/// <param name="pageNumClass">页码数字的class,用于设定样式</param>
/// <param name="pageCurClass">当前页的class,用于设定样式</param>
/// <param name="pageTarget">翻页打开目标(当前页,新窗口),默认_self</param>
/// <param name="prevPageText">上一页的链接文本</param>
/// <param name="nextPageText">下一页的链接文本</param>
/// <param name="pageBreakText">页码省略符的文本,默认为"..."</param>
/// <returns></returns>
public static string getPageBarHtml(int currentPage, int totalPage, int pageCount = 5, string url = "", string urlFormat = "{{page}}", string pageBreakClass = "pageBreak", string pageTextClass = "pageText", string pageNumClass = "pageNum", string pageCurClass = "pagecur", string pageTarget = "_self", string prevPageText = "上一页", string nextPageText = "下一页", string pageBreakText = "...")
{
StringBuilder sb = new StringBuilder();
//总页数大于1
if (totalPage > 1)
{
if (currentPage == 1)
{
//当前页为1的情况
sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, prevPageText);
sb.AppendFormat("<span class=\"{0} {1}\">1</span>", pageNumClass, pageCurClass);
for (int i = 2; i <= (currentPage + pageCount - 1 < totalPage ? currentPage + pageCount - 1 : totalPage); i++)//以小的来,如果pagecount
{
string cpage = i.ToString();
sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString());
}
if (totalPage > pageCount)
{
if (!string.IsNullOrEmpty(pageBreakText))
{
sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//页码省略号...
}
}
sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage + 1).ToString()), pageTarget, nextPageText);//下一页
}
else if (currentPage == totalPage)
{
//当前页是尾页的情况
sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage - 1).ToString()), pageTarget, prevPageText);//上一页
int startI = currentPage - pageCount;//往后移一位,因为多减去了他本身
startI = (startI <= 0) ? 1 : startI;//如果减多了,小于0了,就给他默认1
if (startI > 1)
{
startI += 1;
if (!string.IsNullOrEmpty(pageBreakText))
{
sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//页码省略号...
}
}
for (int i = startI; i < totalPage; i++)
{
string cpage = i.ToString();
sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString());
}
sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageNumClass, pageCurClass, totalPage);
sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, nextPageText);
}
else
{
int leftCount = 0;
int rightCount = 0;
//是中间页的情况
pageCount = pageCount - 1;//要排除那个页码的自身
if (pageCount % 2 == 0)//看下是否可以对半分
{
//显示页码总数是偶数的情况,对半分
leftCount = pageCount / 2;
rightCount = pageCount / 2;
}
else
{
//显示页码总数是奇数的情况
double d_l = Convert.ToDouble(pageCount / 2.0);
leftCount = Convert.ToInt32(Math.Floor(d_l));//左边少,那就用Floor,反之就用Ceiling
rightCount = Convert.ToInt32(Math.Ceiling(d_l));//右边多,那就用Ceiling,反之就用Floor
}
if (rightCount > (totalPage - currentPage))//判断剩余的页码和右面要显示的页码哪个多,取小的那个
{
int cha = totalPage - currentPage;//计算当前页距离尾页还有几页
leftCount += rightCount - cha;//如果右面不足,那就用左面的补充,rightcount-cha就是计算rightcount比这个相差页数多出几页
}
int startI = currentPage - leftCount;
startI = (startI <= 0) ? 1 : startI;//如果减多了,小于0了,就给他默认1
sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage - 1).ToString()), pageTarget, prevPageText);//上一页
if (startI > 1)
{
if (!string.IsNullOrEmpty(pageBreakText))
{
sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//页码省略号...
}
}
for (int i = startI; i < currentPage; i++)
{
string cpage = i.ToString();
sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString());
}
sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageNumClass, pageCurClass, currentPage);//当前页
for (int i = currentPage + 1; i <= (currentPage +rightCount < totalPage ? currentPage+rightCount : totalPage); i++)
{
string cpage = i.ToString();
sb.AppendFormat("<a href=\"{0}\" class=\"{1}\" target=\"{2}\">{3}</a>", url.Replace(urlFormat, cpage.ToString()), pageNumClass, pageTarget, cpage.ToString());
}
if (currentPage + rightCount < totalPage)
{
if (!string.IsNullOrEmpty(pageBreakText))
{
sb.AppendFormat("<span class=\"{0}\">{1}</span>", pageBreakClass, pageBreakText);//就那个页数的...
}
}
sb.AppendFormat("<a class=\"{0}\" href=\"{1}\" target=\"{2}\">{3}</a>", pageTextClass, url.Replace(urlFormat, (currentPage + 1).ToString()), pageTarget, nextPageText);//下一页
}
}
else
{
//总页数等于1
sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, prevPageText);
sb.AppendFormat("<span class=\"{0} {1}\">1</span>", pageNumClass, pageCurClass);
sb.AppendFormat("<span class=\"{0} {1}\">{2}</span>", pageTextClass, pageCurClass, nextPageText);
}
string res = sb.ToString();
return res;
}调用:
string url = "https://www.yangguangdream.com/?page={{page}}";
int page = 5;
int totalPage = 180;
string pageBarHtml = getPageBarHtml(page, totalPage, 6, url, "{{page}}", "pagebreak pagecur", "pageText", "pageNum", "pagecur", "_self", "上一页", "下一页", "...");输出(经过在线工具手动格式化,实际出来是没有换行格式的):
<a class="pageText" href="https://www.yangguangdream.com/?page=4" target="_self">上一页</a> <span class="pagebreak pagecur">...</span> <a href="https://www.yangguangdream.com/?page=3" class="pageNum" target="_self">3</a> <a href="https://www.yangguangdream.com/?page=4" class="pageNum" target="_self">4</a> <span class="pageNum pagecur">5</span> <a href="https://www.yangguangdream.com/?page=6" class="pageNum" target="_self">6</a> <a href="https://www.yangguangdream.com/?page=7" class="pageNum" target="_self">7</a> <a href="https://www.yangguangdream.com/?page=8" class="pageNum" target="_self">8</a> <span class="pagebreak pagecur">...</span> <a class="pageText" href="https://www.yangguangdream.com/?page=6" target="_self">下一页</a>

微信扫码查看本文
发表评论