写了一个MVC分页类
public class Paging
{
private Regex regex = new Regex(@"^[0-9]+$");
private int showIcons = 6;//显示的分页按钮数目
private int currentPageIndex;//当前页数
private int totalCount;
private int pageSize;
private string routeDataPage;
public NameValueCollection QueryString{get;set;}
public string Url{get;set;}
public string ParseUrl { get; set; }
public string CssClassName { get; set; }
public string RouteDataPage
{
get
{
return routeDataPage;
}
set
{
routeDataPage = value;
if (value == string.Empty||value==null)
{
CurrentPageIndex = 1;
}
else
{
CurrentPageIndex = StrToInt(value.TrimStart('p').TrimStart('P'), 1);
}
}
}
public int ShowIcons
{
get
{
return showIcons;
}
set
{
this.showIcons = value;
}
}
public int TotalCount//总数据条数
{
get
{
return totalCount;
}
set
{
totalCount = value;
GetPageCount();
}
}
public int PageSize//单页呈现的数目
{
get
{
return pageSize;
}
set
{
pageSize = value;
GetPageCount();
}
}
public int PageCount//总页数
{
get;
set;
}
public int CurrentPageIndex
{
get
{
return currentPageIndex;
}
set
{
if (!regex.IsMatch(value.ToString()))
{
currentPageIndex = 1;
}
else
{
if (value == 0||(value > PageCount && PageCount == 0))
{
currentPageIndex = 1;
}
else if(value>PageCount&&PageCount!=0)
{
currentPageIndex = PageCount;
}
else
{
currentPageIndex = value;
}
}
}
}
public Paging(int total,string routeDataPage,int pageSize,string url,NameValueCollection queryString)
{
this.TotalCount = total;
this.PageSize = pageSize;
GetPageCount();
this.RouteDataPage = routeDataPage;
this.Url = url;
this.QueryString = queryString;
HttpContext.Current.RewritePath(url,true);
Url = HttpContext.Current.Request.FilePath;
//GetPageCount();
}
public void GetPageCount()//获取总页数
{
if (pageSize == 0) return;
this.PageCount = (TotalCount % PageSize > 0) ? (TotalCount / PageSize + 1) : (TotalCount / PageSize);
}
public void GetParseUrl()
{
if (QueryString.Count == 0 )
{
ParseUrl =Url+"p{0}";
}
else
{
StringBuilder Paras = new StringBuilder("");
foreach(string key in QueryString.AllKeys)
{
Paras.Append("&" + key + "=" +HttpContext.Current.Server.UrlEncode(HttpContext.Current.Server.UrlDecode(QueryString[key])));
}
ParseUrl =Url+"p{0}?" + Paras.ToString().TrimStart('&');
}
}
//记录总数量 单页数量大小 当前页 最大初始化页数(1 2 3 4 5 6...20)示例为6 要求 链接页面
public string GetPagerStr()
{
GetParseUrl();
StringBuilder sb = new StringBuilder();
if (TotalCount == 0)
{
return string.Empty;
}
string BeginStr=GetBeginStr();
string EndStr=GetEndStr();
//页数如果小于等于最大初始化呈现页数
if (PageCount <= (ShowIcons + 1))
{
sb.Append(BeginStr);
sb.Append(GetMiddleStr(1,PageCount,ParseUrl));
sb.Append(EndStr);
}
else
{
if (CurrentPageIndex < ShowIcons) //如果当前页小于等于初始化数目
{
sb.Append(BeginStr);
sb.Append(GetMiddleStr( 1,showIcons,ParseUrl));
sb.Append("<span>...</span><a href=\"" + String.Format(ParseUrl,(PageCount).ToString()) + "\">" + PageCount.ToString() + "</a>");
sb.Append(EndStr);
}
else//如果当前页大于初始化页面
{
if (CurrentPageIndex > (PageCount - ShowIcons + 1))//满足后几页
{
sb.Append(BeginStr);
sb.Append("<a href=\"" + String.Format(ParseUrl,1) + "\">1</a> <span>...</span> ");
sb.Append(GetMiddleStr(PageCount - ShowIcons + 1, PageCount,ParseUrl));
sb.Append(EndStr);
}
else//满足处在中间
{
sb.Append(BeginStr);
sb.Append("<a href=\"" + String.Format(ParseUrl,1) + "\">1</a> <span>...</span> ");
sb.Append(GetMiddleStr(CurrentPageIndex - (ShowIcons - 2) / 2, CurrentPageIndex + (ShowIcons - 2) / 2,ParseUrl));
sb.Append(" <span>...</span> <a href=\"" +String.Format(ParseUrl,(PageCount).ToString()) + "\">" + PageCount.ToString() + "</a>");
sb.Append(EndStr);
}
}
}
return sb.ToString();
}
//中间循环代码
public string GetMiddleStr(int StartIndex,int EndIndex,string ParseUrl)
{
StringBuilder MiddleSb = new StringBuilder();
for (int i = StartIndex; i <= EndIndex; i++)
{
if (i != CurrentPageIndex)
{
MiddleSb.Append("<a href=\"" +String.Format(ParseUrl, i.ToString()) + "\">" + i.ToString() + "</a>");
}
else
{
MiddleSb.Append("<span class=\"current\">" + i.ToString() + "</span>");
}
}
return MiddleSb.ToString();
}
//获取开始代码
public string GetBeginStr()
{
string BeginStr;
//如果当前页数是首页 上一页无效
if (CurrentPageIndex == 1)
{
BeginStr = "<div class=\"" + CssClassName + "\"><span class=\"info\">共" + TotalCount.ToString() + "条记录 " + PageCount + "页 当前第 1 页</span><span class=\"num\">";
}
else
{
BeginStr = "<div class=\"" + CssClassName + "\"><span class=\"info\">共" + TotalCount.ToString() + "条记录 " + PageCount + "页 当前第 " + CurrentPageIndex.ToString() + " 页</span><span class=\"num\"><a href=\"" + string.Format(ParseUrl,(CurrentPageIndex - 1).ToString()) + "\">上一页</a>";
}
return BeginStr;
}
//获取结尾代码
public string GetEndStr()
{
string EndStr;
//判断尾页
if (CurrentPageIndex == PageCount)
{
EndStr = "</span></div>";
}
else
{
EndStr = "<a href=\"" + String.Format(ParseUrl, (CurrentPageIndex + 1).ToString()) + "\">下一页</a></span></div>";
}
return EndStr;
}
/// <summary>
/// string型转换为int型
/// </summary>
public static int StrToInt(string strValue, int defValue)
{
if (string.IsNullOrEmpty(strValue)) return defValue;
if (!int.TryParse(strValue.ToString(), out defValue)) return defValue;
return defValue;
}
}
调用
[ActionName("List")]
public ActionResult BookList(string id)
{
MyDataContext mdc = new MyDataContext();
int count = SqlHelper.GetDataCount("select count(*) from book");
Paging paging = new Paging(count, id, 1, "/Book/List/", Request.QueryString);
int currentPageIndex = paging.CurrentPageIndex-1;
int pageSize = paging.PageSize;
var books = mdc.ExecuteQuery<Book>("select a.bookname, b.authorname from book as a left join Author as b on a.authorid=b.authorid");
books=books.Skip(currentPageIndex * pageSize).Take(pageSize);
BookPager bookPager = new BookPager();
bookPager.Books = books.ToList();
bookPager.Paging = paging;
return View(bookPager);
}
<div>
<% foreach(Book bk in Model.Books){ %>
作者:<%= bk.AuthorName %>书本:<%: bk.BookName %>
<%} %>
<%= Model.Paging.GetPagerStr()%>
</div>