Asp.net mvc项目分页功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Asp.net mvc项目分页功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6622字,纯文字阅读大概需要10分钟。
内容图文
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> 23public Pager( 24 ControllerContext context, 25 IEnumerable<T> source, 26int pageSize = 10, 27string currentPageurlParamName = "page") 28 { 29 30this.PageSize = pageSize; 31this.CurrentPageUrlParamName = currentPageurlParamName; 32 33this.TotalItmesCount = source.Count(); 34var page = 1; 35int.TryParse(context.HttpContext.Request.Params[CurrentPageUrlParamName], out page); 36this.CurrentPage = page; 37 38this.data = source.Skip((CurrentPage - 1) * PageSize) 39 .Take(PageSize); 40 41this.PageNavProvider = new PagerNavProvider<T>(this); 42 } 43///<summary> 44/// URL中 页码参数名称 45///</summary> 46publicstring CurrentPageUrlParamName 47 { 48get; 49privateset; 50 } 51privateint currentPage; 52///<summary> 53/// 当前页码,从1开始 54///</summary> 55publicint CurrentPage 56 { 57get { return currentPage; } 58privateset 59 { 60if (value > TotalPage) 61 currentPage = TotalPage; 62elseif (value <= 0) 63 currentPage = 1; 64else 65 currentPage = value; 66 } 67 } 68///<summary> 69/// 用于分页的数据总数 70///</summary> 71publicint TotalItmesCount 72 { 73get; 74privateset; 75 } 76///<summary> 77/// 每页包含的数据总数,默认为10条 78///</summary> 79publicint PageSize 80 { 81get; 82privateset; 83 } 84///<summary> 85/// 最大页码,即总页数 86///</summary> 87publicint TotalPage 88 { 89get 90 { 91return (TotalItmesCount / PageSize) + (TotalItmesCount % PageSize > 0 ? 1 : 0); 92 } 93 } 94///<summary> 95/// 是否有上一页 96///</summary> 97publicbool HasPrev 98 { 99get100 { 101return CurrentPage > 1; 102 } 103 } 104///<summary>105/// 是否有下一页 106///</summary>107publicbool HasNext 108 { 109get110 { 111return CurrentPage < TotalPage; 112 } 113 } 114///<summary>115/// 上一页页码 116///</summary>117publicint PrevPage 118 { 119get120 { 121if (HasPrev) 122return CurrentPage - 1; 123else124thrownew Exception("已经是第一页了!"); 125 } 126 } 127///<summary>128/// 下一页页码 129///</summary>130publicint NextPage 131 { 132get133 { 134if (HasNext) 135return CurrentPage + 1; 136else137thrownew Exception("已经是最后一页了!"); 138 } 139 } 140private IEnumerable<T> data; 141///<summary>142/// 当前页包含的数据 143///</summary>144public IEnumerable<T> CurrentPageItems 145 { 146get { return data; } 147 } 148149public PagerNavProvider<T> PageNavProvider { get; privateset; } 150 } 151152publicclass PagerNavProvider<T> 153 { 154155public PagerNavProvider(Pager<T> pager, int dispalyPage = 10) 156 { 157 DisplayPage = dispalyPage; 158var cur = pager.CurrentPage; 159 StartPageNum = cur - pager.PageSize / 2; 160 EndPageNum = cur + pager.PageSize / 2; 161if (StartPageNum <= 0 || pager.TotalPage < DisplayPage) 162 StartPageNum = 1; 163if (EndPageNum >= pager.TotalPage || pager.TotalPage < DisplayPage) 164 EndPageNum = pager.TotalPage; 165 } 166publicint DisplayPage { get; privateset; } 167publicint StartPageNum { get; privateset; } 168publicint EndPageNum { get; privateset; } 169 }
2.定义一个要展示列表数据的视图模型(根据具体情况定义模型属性)
1 public class ServiceListVModel 2 { 3 4 public IEnumerable<Service> Services { get; set; } 56public Pager<Service> Pager { get; set; } 789 }
3.在控制器中为视图模型赋值传递数据
1 public ActionResult List(string code = "11") 2 { 3var services = dbSession.ServiceRepository.LoadEntities(p=>p.Type.StartsWith(code)); 4var model = new ServiceListVModel(); 5 model.Services = services; 6var pager = new Pager<Service>( 7this.ControllerContext, 8 services, 910); 10 model.Pager = pager; 11 ViewBag.ServiceTypeCode = code; 12return View(model); 13 }
4.前端页面数据展示(分页样式根据自己想要的效果自由替换)
1 @model ServiceTrade.ViewModels.ServiceListVModel 2 @{ 3 ViewBag.Title = "服务列表"; 4 Layout = "~/Views/Shared/_Layout.cshtml"; 5} 6 <div class="centerMain goldMain middle clearfix" id="goldMainL"> 7 <div class="goldMainW"> 8 @Html.Action("ServiceTypeList") 9 <ul class="searchResultList"> 10 @foreach (var item in Model.Pager.CurrentPageItems) 11 { 12 <li class="searchTerms clearfix"> 13 <div class="searchTermsPic"> 14 <a class="searchTerPicA" href="/Service/Detail?id=@item.ID" target="_blank"15 title="@item.Name"> 16 <img alt="@item.Name" src="@item.Pic" style=" width:100px; height:100px;"></a> 17 </div> 18 <div class="searchTermsDetail"> 19 <h2 class="title"> 20 <a data-exposure="1,0,67167185"class="comtitle" href="/Service/Detail?id=@item.ID"21 target="_blank" title="@item.Name">@item.Name</a> 22 </h2> 23 <div class="searchTermsDIntro"> 24 <b>¥@item.Price</b> 25 </div> 26 <div class="searchTermsOper"> 27 <a rel="external nofollow"class="qq" target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=@item.Company.QQ&site=qq&menu=yes"> 28 <img border="0" src="../../../Themes/FrontEnd/Images/qq.gif" alt="点击这里给我发消息" title="点击这里给我发消息"></a> 29 </div> 30 </div> 31 <div class="searchTermsC"> 32 <p class="companyName"> 33 <a data-exposure="1,2055823,0" href="/Company/Index?id=@item.CompanyID" target="_blank"> 34 @item.Company.Name</a> 35 </p> 36 <p class="bus-mod"> 37 经营模式:@item.Company.BusinessModel</p> 38 <p class="companySell"> 39 <span class="sell">主营:</span> @item.Company.MainService 40 </p> 41 <p class="relate"> 42 <a href="javascript:void(0);" target="_blank">厂家地址</a> 43 | <a href="javascript:void(0);" target="_blank">更多产品</a></p> 44 </div> 45 </li> 46 } 47 </ul> 4849 <div class="pagination middle"> 50 @Html.Partial("_PagerNavX", Model.Pager) 51 <div class="gotoPages"> 52 @if (Model.Services != null) 53 { 54 <span>共 @Model.Services.Count()页</span> 55 } 56else57 { 58 <span>共0页</span> 59 } 60 </div> 61 </div> 62 </div> 63 </div>
5.分页最终效果图
原文:http://www.cnblogs.com/weishuanbao/p/4747201.html
内容总结
以上是互联网集市为您收集整理的Asp.net mvc项目分页功能全部内容,希望文章能够帮你解决Asp.net mvc项目分页功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。