近期对MVc自定义分页作了一下小研究下面把他记下来

下述代1,2,3里面的代码可以直接拷贝,4以后的根据情况自己选定

1.在后台任写如下的扩展方法(任一类库都可以,但是用时得引用命名空间)

  1. // 添加using System.Web; using System.Web.Mvc; 引用,找不到可以从MVC层拷贝
  1. namespace System.Web.Mvc.Html // 注意一定要把类的命名空间写成System.Web.Mvc.Html
  2. {
  3. public static class PageExtensioncs // 一定要是静态类
  4. {
  5. // 一定要是静态方法
  6. public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount)
  7. {
  8.  
  9. var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;
  10.  
  11. pageSize = pageSize == ? : pageSize; // 显示条数设置
  12.  
  13. var totalPages = Math.Max((totalCount + pageSize - ) / pageSize, ); //总页数
  14.  
  15. var output = new StringBuilder();
  16.  
  17. if (totalPages > )
  18. {
  19.  
  20. output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首页</a> ", redirectTo, pageSize);
  21.  
  22. if (currentPage > )
  23. {//处理上一页的连接
  24.  
  25. output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一页</a> ", redirectTo, currentPage - , pageSize);
  26.  
  27. }
  28. output.Append(" ");
  29.  
  30. int currint = ;
  31.  
  32. for (int i = ; i <= ; i++)
  33. {//一共最多显示10个页码,前面5个,后面5个
  34.  
  35. if ((currentPage + i - currint) >= && (currentPage + i - currint) <= totalPages)
  36. {
  37.  
  38. if (currint == i)
  39. {//当前页处理
  40.  
  41. output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage);
  42.  
  43. }
  44.  
  45. else
  46. {//一般页处理
  47.  
  48. output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint);
  49.  
  50. }
  51.  
  52. }
  53.  
  54. output.Append(" ");
  55. }
  56.  
  57. if (currentPage < totalPages)
  58. {//处理下一页的链接
  59.  
  60. output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一页</a> ", redirectTo, currentPage + , pageSize);
  61.  
  62. }
  63. output.Append(" ");
  64.  
  65. if (currentPage != totalPages)
  66. {
  67.  
  68. output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, totalPages, pageSize);
  69.  
  70. }
  71.  
  72. output.Append(" ");
  73.  
  74. }
  75.  
  76. output.AppendFormat("<label>第{0}页 / 共{1}页</label>", currentPage, totalPages);//这个统计加不加都行
  77. return new HtmlString(output.ToString());
  78.  
  79. }
  80. }
  81. }

2.添加分页信息类

  1. namespace SysCommon
  2. {
  3. public class PagerInfo
  4. {
  5. /// <summary>
  6. /// 总记录数
  7. /// </summary>
  8. public int RecordCount { get; set; }
  9.  
  10. /// <summary>
  11. /// 当前页码
  12. /// </summary>
  13. public int CurrentPageIndex { get; set; }
  14.  
  15. /// <summary>
  16. /// 显示条数
  17. /// </summary>
  18. public int PageSize { get; set; }
  19.  
  20. }
  21. }

3.添加泛型对像叠加类(这里的这种用法很值得学习)

  1. namespace SysCommon
  2. {
  3. public class PagerQuery<TPager, TEntityList>
  4. {
  5.  
  6. public PagerQuery(TPager pager, TEntityList entityList)
  7. {
  8.  
  9. this.Pager = pager;
  10.  
  11. this.EntityList = entityList;
  12.  
  13. }
  14.  
  15. public TPager Pager { get; set; }
  16.  
  17. public TEntityList EntityList { get; set; }
  18.  
  19. }
  20. }

上述代1,2,3里面的代码可以直接拷贝

4.在Controller中代码如下 (注意)

  1. public ActionResult Index(int? pageSize,int? pageIndex)
  2. {
  3. List<UserInfo> list = new List<UserInfo>();
  4. UserInfo u1 = new UserInfo { Uid=,UserName="zs",TrueName="张三"};
  5. list.Add(u1);
  6. UserInfo u2 = new UserInfo { Uid = , UserName = "zs2", TrueName = "张三2" };
  7. list.Add(u2);
  8. UserInfo u3 = new UserInfo { Uid = , UserName = "zs3", TrueName = "张三3" };
  9. list.Add(u3);
  10. UserInfo u4 = new UserInfo { Uid = , UserName = "zs4", TrueName = "张三4" };
  11. list.Add(u4);
  12. UserInfo u5 = new UserInfo { Uid = , UserName = "zs5", TrueName = "张三5" };
  13. list.Add(u5);
  14. UserInfo u6 = new UserInfo { Uid = , UserName = "zs6", TrueName = "张三6" };
  15. list.Add(u6);
  16. UserInfo u7 = new UserInfo { Uid = , UserName = "zs7", TrueName = "张三7" };
  17. list.Add(u7);
  18. UserInfo u8 = new UserInfo { Uid = , UserName = "zs8", TrueName = "张三8" };
  19. list.Add(u8);
  20. UserInfo u9 = new UserInfo { Uid = , UserName = "zs9", TrueName = "张三9" };
  21. list.Add(u9);
  22. UserInfo u10 = new UserInfo { Uid = , UserName = "zs10", TrueName = "张三10" };
  23. list.Add(u10);
  24. UserInfo u11 = new UserInfo { Uid = , UserName = "zs11", TrueName = "张三11" };
  25. list.Add(u11);
  26. UserInfo u12 = new UserInfo { Uid = , UserName = "zs12", TrueName = "张三12" };
  27. list.Add(u12);
  28. UserInfo u13 = new UserInfo { Uid = , UserName = "zs13", TrueName = "张三13" };
  29. list.Add(u13);
  30. UserInfo u14 = new UserInfo { Uid = , UserName = "zs14", TrueName = "张三14" };
  31. list.Add(u14);
  32. UserInfo u15 = new UserInfo { Uid = , UserName = "zs15", TrueName = "张三15" };
  33. list.Add(u15);
  34. UserInfo u16 = new UserInfo { Uid = , UserName = "zs16", TrueName = "张三16" };
  35. list.Add(u16);
  36. UserInfo u17 = new UserInfo { Uid = , UserName = "zs17", TrueName = "张三17" };
  37. list.Add(u17);
  38. UserInfo u18 = new UserInfo { Uid = , UserName = "zs18", TrueName = "张三18" };
  39. list.Add(u18);
  40. UserInfo u19 = new UserInfo { Uid = , UserName = "zs19", TrueName = "张三19" };
  41. list.Add(u19);
  42. UserInfo u20 = new UserInfo { Uid = , UserName = "zs20", TrueName = "张三20" };
  43. list.Add(u20);
  44. UserInfo u21 = new UserInfo { Uid = , UserName = "zs21", TrueName = "张三21" };
  45. list.Add(u21);
  46. UserInfo u22 = new UserInfo { Uid = , UserName = "zs22", TrueName = "张三22" };
  47. list.Add(u22);
  48. UserInfo u23 = new UserInfo { Uid = , UserName = "zs23", TrueName = "张三23" };
  49. list.Add(u23);
  50. UserInfo u24 = new UserInfo { Uid = , UserName = "zs24", TrueName = "张三24" };
  51. list.Add(u24);
  52. UserInfo u25 = new UserInfo { Uid = , UserName = "zs25", TrueName = "张三25" };
  53. list.Add(u25);
  54. UserInfo u26 = new UserInfo { Uid = , UserName = "zs26", TrueName = "张三26" };
  55. list.Add(u26);
  56. PagerInfo p = new PagerInfo();
  57. int pageIndex1 = pageIndex ?? ; // 重置或获取当前页默认值
  58. int pageSize1 = pageSize ?? ; // 重置或获取显示条数
  59. List<UserInfo> list2 = list.Skip((pageIndex1 - ) * pageSize1).Take(pageSize1).ToList(); // 取页面显示的数据
  60. p.PageSize = pageSize1; // 设置页码
  61. p.RecordCount = list.Count; // 设置总记录数
  62. p.CurrentPageIndex = pageIndex1; // 设置当前页码
    // 实例化合并泛型,获取数据
  63. PagerQuery<PagerInfo, List<UserInfo>> pgaequery = new PagerQuery<PagerInfo, List<UserInfo>>(p, list2);
  64. return View(pgaequery); // 返回数据
  65. }

5.View 视图中的显示代码 重点@Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount)

  1. @using SysModels
  2. @using SysCommon
  3. @model PagerQuery<PagerInfo,List<UserInfo>>
  4. @{
  5. ViewBag.Title = "Index";
  6. Layout = "~/Views/Shared/_Layout.cshtml";
  7. }
  8. @section Head{
  9.  
  10. }
  11. <div style=" width:100%;">
  12. <table style="margin:0 auto;">
  13. <thead>
  14. <tr>
  15. <th>用户ID</th>
  16. <th>用户名</th>
  17. <th>真实姓名</th>
  18. <th>Email</th>
  19. <th>English</th>
  20. <th>Tell</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. @foreach (UserInfo u in Model.EntityList)
  25. {
  26. <tr>
  27. <td>@u.Uid</td>
  28. <td>@u.UserName</td>
  29. <td>@u.TrueName</td>
  30. <td>@u.Email</td>
  31. <td>@u.EnglishName</td>
  32. <td>@u.Tell</td>
  33. </tr>
  34. }
  35. </tbody>
  36. </table>
  37. <div class="paginator" style=" width:600px;margin:0 auto;">
  38. @Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount)
  39. </div>
  40. </div>

6. 可以加上样式 代码如下

  1. <style type="text/css">
  2. .paginator
  3. {
  4. font: 14px Arial, Helvetica, sans-serif;
  5. padding: 10px 20px 10px ;
  6. margin: 0px auto;
  7. }
  8.  
  9. .paginator a
  10. {
  11. border: solid 1px #ccc;
  12. color: #0063dc;
  13. cursor: pointer;
  14. text-decoration: none;
  15. }
  16.  
  17. .paginator a:visited
  18. {
  19. padding: 1px 6px;
  20. border: solid 1px #ddd;
  21. background: #fff;
  22. text-decoration: none;
  23. }
  24.  
  25. .paginator .cpb
  26. {
  27. border: 1px solid #F50;
  28. font-weight: ;
  29. color: #F50;
  30. background-color: #ffeee5;
  31. }
  32.  
  33. .paginator a:hover
  34. {
  35. border: solid 1px #F50;
  36. color: #f60;
  37. text-decoration: none;
  38. }
  39.  
  40. .paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover
  41. {
  42. float: left;
  43. height: 20px;
  44. line-height: 20px;
  45. min-width: 14px;
  46. _width: 14px;
  47. margin-right: 5px;
  48. text-align: center;
  49. white-space: nowrap;
  50. font-size: 14px;
  51. font-family: Arial,SimSun;
  52. padding: 3px;
  53. }
  54.  
  55. .paginator label
  56. {
  57. display:block;
  58. float:left;
  59. margin-top:4px;
  60. }
  61.  
  62. </style>

7.显示效果如下

本文原于   *滴血* 的博客,只是根据本人自己的实例做了更详细的阐述.

*滴血* 文章参考:http://www.cnblogs.com/ChengPuYuan/p/3715412.html

MVc分页【关于使用扩展方法实现MVc分页】的更多相关文章

  1. ASP.NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

  2. Asp.Net MVC以 JSON传值扩展方法

    Asp.Net在客户端和服务器端,以JSON形式相互传值,可写扩展方法,用到的类型如下: DataContractJsonSerializer类: 该类在System.Runtime.Serializ ...

  3. Asp.Net MVC以JSON传值扩展方法

    Asp.Net在客户端和服务器端,以JSON形式相互传值,可写扩展方法,用到的类型如下: DataContractJsonSerializer类: 该类在System.Runtime.Serializ ...

  4. ASP.NET MVC HtmlHelper 类的扩展方法

    再ASP.NET MVC编程中用到了R语法,在View页面编辑HTML标签的时候,ASP.NET MVC 为我们准备好了可以辅助我们写这些标签的办法,它们就是HtmlHelper.微软官方地址是:ht ...

  5. 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)

    回到目录 说在前 我都是喜欢把问题复杂化,还有总是喜欢把问题简单化,偷懒化,这也需就是一个程序员的追求吧,呵呵. 我不太喜欢重复的东西,当你看到页面上有一个以上相同的代码时,那可以说,你的代码有重构的 ...

  6. MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)

    该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...

  7. linq to sql 扩展方法

    老赵的博客:http://blog.zhaojie.me/2008/02/using-translate-method-and-modify-command-text-before-query-in- ...

  8. Mvc 分页栏扩展方法

    using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Sy ...

  9. MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集(转)

    namespace Entity { public interface IPagedList { /// <summary> /// 记录数 /// </summary> in ...

随机推荐

  1. layerui如何设置显示的位置?

    转自:http://www.layui.com/doc/modules/layer.html#offset layer.open({ type: 1,//默认:0 (0表示信息框,1表示页面层,2表示 ...

  2. linux下如何启动nginx?

    命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ........... [root@localhost sbin ...

  3. log4j日志服务器配置

    可参考的文章: http://www.jb51.net/article/89597.htm http://www.jb51.net/article/41001.htm http://liuzhijun ...

  4. vue下登录页背景图上下空白处自适应等高

    遇到需求,登录页面需要顶部和底部上下等高,并且随着浏览器自适应上下高度. 解决方法: vue界面的data中先定义 data() { return { windowHeight: "&quo ...

  5. MapReduce分区和排序

    一.排序 排序: 需求:根据用户每月使用的流量按照使用的流量多少排序 接口-->WritableCompareable 排序操作在hadoop中属于默认的行为.默认按照字典殊勋排序. 排序的分类 ...

  6. 【c++】生成浮点随机数

    c++11:std::uniform_real_distribution<>直接求(尖括号不填默认生成double) 随机10个在1-2之间的浮点数 #include <random ...

  7. Mysql2索引

    索引分类: 作用:优化查询,select查询有三种情况:缓存查询(不在mysql中进行数据查询),全表查询,索引扫描 Btree(btree b+tree b*tree) Rtree HASH Ful ...

  8. python基础之小数据池、代码块、编码

    一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...

  9. mysql 约束条件 auto_increment 自动增长 创建表时设置自增字段

    auto_increment mysql) )auto_increment; Query OK, rows affected (0.01 sec) mysql> show create tabl ...

  10. 详解MySQL第二篇—DML语句

    DML 语句: DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查(select),是开发人员日常使用最频繁的操作.下面将依次 ...