最近在参考Discuz.nt的源码,虽说他们的这种模式比较另类,或者不容易接受(个人感觉),不过还是有蛮多实用的代码,就像这段手工分页代码,参考了下下。
/// <summary>
/// 获得页码显示链接
/// </summary>
/// <param name="curPage">当前页数</param>
/// <param name="countPage">总页数</param>
/// <param name="url">超级链接地址</param>
/// <param name="extendPage">周边页码显示个数上限</param>
/// <returns>页码html</returns>
public static string GetPageNumbers(int curPage, int countPage, string url, int extendPage)
{
int startPage = 1;
int endPage = 1;
if(url.IndexOf("?") > 0)
{
url = url + "&";
}
else
{
url = url + "?";
}
string t1 = "<a href=\"" + url + "&page=1" + "\">«</a> ";
string t2 = "<a href=\"" + url + "&page=" + countPage + "\">»</a> ";
if(countPage < 1) countPage = 1;
if(extendPage < 3) extendPage = 2;
if(countPage > extendPage)
{
if(curPage - (extendPage / 2) > 0)
{
if(curPage + (extendPage / 2) < countPage)
{
startPage = curPage - (extendPage / 2);
endPage = startPage + extendPage - 1;
}
else
{
endPage = countPage;
startPage = endPage - extendPage + 1;
t2 = "";
}
}
else
{
endPage = extendPage;
t1 = "";
}
}
else
{
startPage = 1;
endPage = countPage;
t1 = "";
t2 = "";
}
StringBuilder s = new StringBuilder("");
s.Append(t1);
for (int i = startPage; i <= endPage; i++)
{
if (i == curPage)
{
s.Append(" ");
s.Append(i);
s.Append(" ");
}
else
{
s.Append(" <a href=\"");
s.Append(url);
s.Append("page=");
s.Append(i);
s.Append("\">");
s.Append(i);
s.Append("</a> ");
}
}
s.Append(t2);
return s.ToString();
}
/// 获得页码显示链接
/// </summary>
/// <param name="curPage">当前页数</param>
/// <param name="countPage">总页数</param>
/// <param name="url">超级链接地址</param>
/// <param name="extendPage">周边页码显示个数上限</param>
/// <returns>页码html</returns>
public static string GetPageNumbers(int curPage, int countPage, string url, int extendPage)
{
int startPage = 1;
int endPage = 1;
if(url.IndexOf("?") > 0)
{
url = url + "&";
}
else
{
url = url + "?";
}
string t1 = "<a href=\"" + url + "&page=1" + "\">«</a> ";
string t2 = "<a href=\"" + url + "&page=" + countPage + "\">»</a> ";
if(countPage < 1) countPage = 1;
if(extendPage < 3) extendPage = 2;
if(countPage > extendPage)
{
if(curPage - (extendPage / 2) > 0)
{
if(curPage + (extendPage / 2) < countPage)
{
startPage = curPage - (extendPage / 2);
endPage = startPage + extendPage - 1;
}
else
{
endPage = countPage;
startPage = endPage - extendPage + 1;
t2 = "";
}
}
else
{
endPage = extendPage;
t1 = "";
}
}
else
{
startPage = 1;
endPage = countPage;
t1 = "";
t2 = "";
}
StringBuilder s = new StringBuilder("");
s.Append(t1);
for (int i = startPage; i <= endPage; i++)
{
if (i == curPage)
{
s.Append(" ");
s.Append(i);
s.Append(" ");
}
else
{
s.Append(" <a href=\"");
s.Append(url);
s.Append("page=");
s.Append(i);
s.Append("\">");
s.Append(i);
s.Append("</a> ");
}
}
s.Append(t2);
return s.ToString();
}
注:源代码出自Discuz.NET 1.0