分页功能

来源:互联网 发布:勾选不了笔记本优化版 编辑:程序博客网 时间:2024/05/21 19:36

 先上图:


001.png (大小:50.2 K 下载次数:0)


前台代码:

002.png (大小:6.3 K 下载次数:0)

控制器代码:

003.png (大小:5.2 K 下载次数:0)


实现说明:
自定义一个扩展方法完成分页功能。
分页信息类:
 

 

Code:
  1. public class PagerInfo   
  2. {   
  3.        public int RecordCount { getset; }   
  4.        public int CurrentPageIndex { getset; }   
  5.        public int PageSize { getset; }   
  6. }  


用于保存当前页码,页大小,数据行数信息
分页查询信息,用于保存数据和分页信息
 

Code:
  1. public class PagerQuery<TEntity>   
  2. {   
  3.   
  4.     public PagerQuery(PagerInfo pager, TEntity list)   
  5.     {   
  6.         Pager = pager;   
  7.         EntityList = list;   
  8.     }   
  9.     public PagerInfo Pager { getset; }   
  10.     public TEntity EntityList { getset; }   
  11. }   


核心就是分页扩展方法:
 

Code:
  1. public static string Pager(this HtmlHelper hh, string id, PagerInfo pageInfo)   
  2. {   
  3.     return Pager(hh, id, pageInfo.CurrentPageIndex, pageInfo.PageSize, pageInfo.RecordCount, nullnull);   
  4. }   
  5. public static string Pager(this HtmlHelper hh, string id, int currentPageIndex,   
  6.     int pageSize, int recordCount, object htmlAttributes, string className)   
  7. {   
  8.     TagBuilder builder = new TagBuilder("div");   
  9.     builder.IdAttributeDotReplacement = "_";   
  10.     builder.GenerateId(id);   
  11.     if(!string.IsNullOrEmpty(className))   
  12.         builder.AddCssClass(className);   
  13.     if(htmlAttributes!=null)   
  14.         builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));   
  15.     builder.InnerHtml = GetNumericPage(currentPageIndex, pageSize, recordCount);   
  16.     return builder.ToString();   
  17. }   
  18. private static string GetNumericPage(int currentPageIndex, int pageSize, int recordCount)   
  19. {   
  20.     int pageCount = (recordCount % pageSize == 0) ? recordCount / pageSize : recordCount / pageSize + 1;   
  21.     StringBuilder url = new StringBuilder();   
  22.     url.Append(HttpContext.Current.Request.Url.AbsolutePath + "?page={0}");   
  23.     foreach (string key in HttpContext.Current.Request.QueryString.AllKeys)   
  24.     {   
  25.         if (key.ToLower() != "page")   
  26.             url.AppendFormat("&{0}={1}", key,   
  27.                 HttpContext.Current.Request[key]);   
  28.     }   
  29.     StringBuilder sb = new StringBuilder();   
  30.     sb.Append("");   
  31.     sb.AppendFormat("<span>共{0}条记录,共{1}页,当前第{2}页 </span>", recordCount, pageCount, currentPageIndex+1);   
  32.     if (currentPageIndex == 0)   
  33.         sb.Append("<span>首页 </span>");   
  34.     else  
  35.     {   
  36.         string url1 = string.Format(url.ToString(), 0);   
  37.         sb.AppendFormat("<span><a href={0}>首页</a></span> ", url1);   
  38.     }   
  39.     if (currentPageIndex > 1)   
  40.     {   
  41.         string url1 = string.Format(url.ToString(), currentPageIndex - 1);   
  42.         sb.AppendFormat("<span><a href={0}>上一页</a> </span>", url1);   
  43.     }   
  44.     else  
  45.     {   
  46.         sb.Append("<span>上一页 </span>");   
  47.     }   
  48.     sb.Append(GetNumericPage(currentPageIndex, pageSize, recordCount, pageCount, url.ToString()));   
  49.     if (currentPageIndex < pageCount-1)   
  50.     {   
  51.         string url1 = string.Format(url.ToString(), currentPageIndex + 1);   
  52.         sb.AppendFormat("<span><a href={0}>下一页</a> </span>", url1);   
  53.     }   
  54.     else  
  55.     {   
  56.         sb.Append("<span>下一页 </span>");   
  57.     }   
  58.     if (currentPageIndex == pageCount-1)   
  59.         sb.Append("<span>末页 </span>");   
  60.     else  
  61.     {   
  62.         string url1 = string.Format(url.ToString(), pageCount-1);   
  63.         sb.AppendFormat("<span><a href={0}>末页</a> </span>",url1);   
  64.     }   
  65.     return sb.ToString();   
  66. }   
  67. private static string GetNumericPage(int currentPageIndex, int pageSize, int recordCount, int pageCount, string url)   
  68. {   
  69.     int k = currentPageIndex-5;   
  70.     int m = currentPageIndex+5;   
  71.     StringBuilder sb = new StringBuilder();   
  72.     if (k < 0) k = 0;   
  73.     if (m > pageCount - 1) m = pageCount - 1;   
  74.     for (int i = k ; i <=  m; i++)   
  75.     {   
  76.         if (i == currentPageIndex)   
  77.             sb.AppendFormat("<span>{0} </span>", i+1);   
  78.         else  
  79.         {   
  80.             string url1 = string.Format(url, i);   
  81.             sb.AppendFormat("<span><a href={0}>{1}</a> </span>", url1,i+1);   
  82.         }   
  83.     }   
  84.     return sb.ToString();   
  85. }   


这部分代码可以根据自己的需要进行修改!