1.定义一个分页用的Page<T>类 1 /* 使用示例: 2 var pager = new Pager<Article>( 3 this.ControllerContext, //上下文 4 type.Articl ...
1.定义一个分页用的Page<T>类
1 /* 使用示例: 2 var pager = new Pager<Article>( 3 this.ControllerContext, //上下文 4 type.Articles,//数据源 5 10//,每页大小 6 //"page" url中分页参数名称,默认为page 7 ); 8 * */ 9 /// <summary> 10 /// 基于ControlerContext的分页辅助类 11 /// </summary> 12 /// <typeparam name="T"></typeparam> 13 14 public class Pager<T> 15 { 16 /// <summary> 17 /// 数据分页初始化函数 18 /// </summary> 19 /// <param name="context">控制器请求上下文</param> 20 /// <param name="source">数据源</param> 21 /// <param name="pageSize">每页条数</param> 22 /// <param name="currentPageurlParamName">Url中当前页参数名称</param> 23 public Pager( 24 ControllerContext context, 25 IEnumerable<T> source, 26 int pageSize = 10, 27 get='_blank'>string currentPageurlParamName = "page") 28 { 29 30 this.PageSize = pageSize; 31 this.CurrentPageUrlParamName = currentPageurlParamName; 32 33 this.TotalItmesCount = source.Count(); 34 var page = 1; 35 int.TryParse(context.HttpContext.Request.Params[CurrentPageUrlParamName], out page); 36 this.CurrentPage = page; 37 38 this.data = source.Skip((CurrentPage - 1) * PageSize) 39 .Take(PageSize); 40 41 this.PageNavProvider = new PagerNavProvider<T>(this); 42 } 43 /// <summary> 44 /// URL中 页码参数名称 45 /// </summary> 46 public string CurrentPageUrlParamName 47 { 48 get; 49 private set; 50 } 51 private int currentPage; 52 /// <summary> 53 /// 当前页码,从1开始 54 /// </summary> 55 public int CurrentPage 56 { 57 get { return currentPage; } 58 private set 59 { 60 if (value > TotalPage) 61 currentPage = TotalPage; 62 else if (value <= 0) 63 currentPage = 1; 64 else 65 currentPage = value; 66 } 67 } 68 /// <summary> 69 /// 用于分页的数据总数 70 /// </summary> 71 public int TotalItmesCount 72 { 73 get; 74 private set; 75 } 76 /// <summary> 77 /// 每页包含的数据总数,默认为10条 78 /// </summary> 79 public int PageSize 80 { 81 get; 82 private set; 83 } 84 /// <summary> 85 /// 最大页码,即总页数 86 /// </summary> 87 public int TotalPage 88 { 89 get 90 { 91 return (TotalItmesCount / PageSize) + (TotalItmesCount % PageSize > 0 ? 1 : 0); 92 } 93 } 94 /// <summary> 95 /// 是否有上一页 96 /// </summary> 97 public bool HasPrev 98 { 99 get100 {101 return CurrentPage > 1;102 }103 }104 /// <summary>105 /// 是否有下一页106 /// </summary>107 public bool HasNext108 {109 get110 {111 return CurrentPage < TotalPage;112 }113 }114 /// <summary>115 /// 上一页页码116 /// </summary>117 public int PrevPage118 {119 get120 {121 if (HasPrev)122 return CurrentPage - 1;123 else124 throw new Exception("已经是第一页了!");125 }126 }127 /// <summary>128 /// 下一页页码129 /// </summary>130 public int NextPage131 {132 get133 {134 if (HasNext)135 return CurrentPage + 1;136 else137 throw new Exception("已经是最后一页了!");138 }139 }140 private IEnumerable<T> data;141 /// <summary>142 /// 当前页包含的数据143 /// </summary>144 public IEnumerable<T> CurrentPageItems145 {146 get { return data; }147 }148 149 public PagerNavProvider<T> PageNavProvider { get; private set; }150 }151 152 public class PagerNavProvider<T>153 {154 155 public PagerNavProvider(Pager<T> pager, int dispalyPage = 10)156 {157 DisplayPage = dispalyPage;158 var cur = pager.CurrentPage;159 StartPageNum = cur - pager.PageSize / 2;160 EndPageNum = cur + pager.PageSize / 2;161 if (StartPageNum <= 0 || pager.TotalPage < DisplayPage)162 StartPageNum = 1;163 if (EndPageNum >= pager.TotalPage || pager.TotalPage < DisplayPage)164 EndPageNum = pager.TotalPage;165 }166 public int DisplayPage { get; private set; }167 public int StartPageNum { get; private set; }168 public int EndPageNum { get; private set; }169 }
原标题:Asp.net mvc项目分页功能
关键词:ASP.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。