近期对MVc自定义分页作了一下小研究下面把他记下来
下述代1,2,3里面的代码可以直接拷贝,4以后的根据情况自己选定
1.在后台任写如下的扩展方法(任一类库都可以,但是用时得引用命名空间)
// 添加using System.Web; using System.Web.Mvc; 引用,找不到可以从MVC层拷贝
namespace System.Web.Mvc.Html // 注意一定要把类的命名空间写成System.Web.Mvc.Html { public static class PageExtensioncs // 一定要是静态类 { // 一定要是静态方法 public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount) { var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath; pageSize = pageSize == 0 ? 3 : pageSize; // 显示条数设置 var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数 var output = new StringBuilder(); if (totalPages > 1) { output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首页</a> ", redirectTo, pageSize); if (currentPage > 1) {//处理上一页的连接 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一页</a> ", redirectTo, currentPage - 1, pageSize); } output.Append(" "); int currint = 5; for (int i = 0; i <= 10; i++) {//一共最多显示10个页码,前面5个,后面5个 if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages) { if (currint == i) {//当前页处理 output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage); } else {//一般页处理 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint); } } output.Append(" "); } if (currentPage < totalPages) {//处理下一页的链接 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一页</a> ", redirectTo, currentPage + 1, pageSize); } output.Append(" "); if (currentPage != totalPages) { output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, totalPages, pageSize); } output.Append(" "); } output.AppendFormat("<label>第{0}页 / 共{1}页</label>", currentPage, totalPages);//这个统计加不加都行 return new HtmlString(output.ToString()); } } }
2.添加分页信息类
namespace SysCommon { public class PagerInfo { /// <summary> /// 总记录数 /// </summary> public int RecordCount { get; set; } /// <summary> /// 当前页码 /// </summary> public int CurrentPageIndex { get; set; } /// <summary> /// 显示条数 /// </summary> public int PageSize { get; set; } } }
3.添加泛型对像叠加类(这里的这种用法很值得学习)
namespace SysCommon { public class PagerQuery<TPager, TEntityList> { public PagerQuery(TPager pager, TEntityList entityList) { this.Pager = pager; this.EntityList = entityList; } public TPager Pager { get; set; } public TEntityList EntityList { get; set; } } }
上述代1,2,3里面的代码可以直接拷贝
4.在Controller中代码如下 (注意)
public ActionResult Index(int? pageSize,int? pageIndex) { List<UserInfo> list = new List<UserInfo>(); UserInfo u1 = new UserInfo { Uid=1,UserName="zs",TrueName="张三"}; list.Add(u1); UserInfo u2 = new UserInfo { Uid = 2, UserName = "zs2", TrueName = "张三2" }; list.Add(u2); UserInfo u3 = new UserInfo { Uid = 3, UserName = "zs3", TrueName = "张三3" }; list.Add(u3); UserInfo u4 = new UserInfo { Uid = 4, UserName = "zs4", TrueName = "张三4" }; list.Add(u4); UserInfo u5 = new UserInfo { Uid = 5, UserName = "zs5", TrueName = "张三5" }; list.Add(u5); UserInfo u6 = new UserInfo { Uid = 6, UserName = "zs6", TrueName = "张三6" }; list.Add(u6); UserInfo u7 = new UserInfo { Uid = 7, UserName = "zs7", TrueName = "张三7" }; list.Add(u7); UserInfo u8 = new UserInfo { Uid = 8, UserName = "zs8", TrueName = "张三8" }; list.Add(u8); UserInfo u9 = new UserInfo { Uid = 9, UserName = "zs9", TrueName = "张三9" }; list.Add(u9); UserInfo u10 = new UserInfo { Uid = 10, UserName = "zs10", TrueName = "张三10" }; list.Add(u10); UserInfo u11 = new UserInfo { Uid = 11, UserName = "zs11", TrueName = "张三11" }; list.Add(u11); UserInfo u12 = new UserInfo { Uid = 12, UserName = "zs12", TrueName = "张三12" }; list.Add(u12); UserInfo u13 = new UserInfo { Uid = 13, UserName = "zs13", TrueName = "张三13" }; list.Add(u13); UserInfo u14 = new UserInfo { Uid = 14, UserName = "zs14", TrueName = "张三14" }; list.Add(u14); UserInfo u15 = new UserInfo { Uid = 15, UserName = "zs15", TrueName = "张三15" }; list.Add(u15); UserInfo u16 = new UserInfo { Uid = 16, UserName = "zs16", TrueName = "张三16" }; list.Add(u16); UserInfo u17 = new UserInfo { Uid = 17, UserName = "zs17", TrueName = "张三17" }; list.Add(u17); UserInfo u18 = new UserInfo { Uid = 18, UserName = "zs18", TrueName = "张三18" }; list.Add(u18); UserInfo u19 = new UserInfo { Uid = 19, UserName = "zs19", TrueName = "张三19" }; list.Add(u19); UserInfo u20 = new UserInfo { Uid = 20, UserName = "zs20", TrueName = "张三20" }; list.Add(u20); UserInfo u21 = new UserInfo { Uid = 21, UserName = "zs21", TrueName = "张三21" }; list.Add(u21); UserInfo u22 = new UserInfo { Uid = 22, UserName = "zs22", TrueName = "张三22" }; list.Add(u22); UserInfo u23 = new UserInfo { Uid = 23, UserName = "zs23", TrueName = "张三23" }; list.Add(u23); UserInfo u24 = new UserInfo { Uid = 24, UserName = "zs24", TrueName = "张三24" }; list.Add(u24); UserInfo u25 = new UserInfo { Uid = 25, UserName = "zs25", TrueName = "张三25" }; list.Add(u25); UserInfo u26 = new UserInfo { Uid = 26, UserName = "zs26", TrueName = "张三26" }; list.Add(u26); PagerInfo p = new PagerInfo(); int pageIndex1 = pageIndex ?? 1; // 重置或获取当前页默认值 int pageSize1 = pageSize ?? 2; // 重置或获取显示条数 List<UserInfo> list2 = list.Skip((pageIndex1 - 1) * pageSize1).Take(pageSize1).ToList(); // 取页面显示的数据 p.PageSize = pageSize1; // 设置页码 p.RecordCount = list.Count; // 设置总记录数 p.CurrentPageIndex = pageIndex1; // 设置当前页码
// 实例化合并泛型,获取数据 PagerQuery<PagerInfo, List<UserInfo>> pgaequery = new PagerQuery<PagerInfo, List<UserInfo>>(p, list2); return View(pgaequery); // 返回数据 }
5.View 视图中的显示代码 重点@Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount)
@using SysModels @using SysCommon @model PagerQuery<PagerInfo,List<UserInfo>> @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section Head{ } <div style=" 100%;"> <table style="margin:0 auto;"> <thead> <tr> <th>用户ID</th> <th>用户名</th> <th>真实姓名</th> <th>Email</th> <th>English</th> <th>Tell</th> </tr> </thead> <tbody> @foreach (UserInfo u in Model.EntityList) { <tr> <td>@u.Uid</td> <td>@u.UserName</td> <td>@u.TrueName</td> <td>@u.Email</td> <td>@u.EnglishName</td> <td>@u.Tell</td> </tr> } </tbody> </table> <div class="paginator" style=" 600px;margin:0 auto;"> @Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount) </div> </div>
6. 可以加上样式 代码如下
<style type="text/css"> .paginator { font: 14px Arial, Helvetica, sans-serif; padding: 10px 20px 10px 0; margin: 0px auto; } .paginator a { border: solid 1px #ccc; color: #0063dc; cursor: pointer; text-decoration: none; } .paginator a:visited { padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none; } .paginator .cpb { border: 1px solid #F50; font-weight: 700; color: #F50; background-color: #ffeee5; } .paginator a:hover { border: solid 1px #F50; color: #f60; text-decoration: none; } .paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover { float: left; height: 20px; line-height: 20px; min- 14px; _ 14px; margin-right: 5px; text-align: center; white-space: nowrap; font-size: 14px; font-family: Arial,SimSun; padding: 0 3px; } .paginator label { display:block; float:left; margin-top:4px; } </style>
7.显示效果如下
本文原于 *滴血* 的博客,只是根据本人自己的实例做了更详细的阐述.
*滴血* 文章参考:http://www.cnblogs.com/ChengPuYuan/p/3715412.html