上一篇是个简单例子,这篇借分页写个升级版的例子。

不想拼html代码,因为不好修改,那写一个PartialView.

  1. @model System.Web.Mvc.PagerModel
  2. @if (Model.PagerShow)
  3. {
  4. <div id="@Model.PagerId" class="pagination pagination-right">
  5. <ul>
  6. <li class="@((Model.CurTeam == 1)?"disabled":"")"><a href="?p=1"><i class="icon-fast-backward"></i></a></li>
  7. <li class="@((Model.CurTeam == 1)?"disabled":"")"><a href="?p=@Model.PreStep"><i class="icon-backward"></i></a></li>
  8. @foreach (var item in Model.PageList)
  9. {
  10. <li class="@((item.PageNumber == Model.CurPage)?"active":"")"><a href="?p=@item.PageNumber" >@item.PageNumber</a></li>
  11. }
  12. <li class="@((Model.CurTeam == Model.TotalTeam)?"disabled":"")"><a href="?p=@Model.NextStep"><i class="icon-forward"></i></a></li>
  13. <li class="@((Model.CurTeam == Model.TotalTeam)?"disabled":"")"><a href="?p=@Model.TotalPage"><i class="icon-fast-forward"></i></a></li>
  14. </ul>
  15. </div>
  16. }

然后写扩展方法,顺带PartialView的Model。用HtmlHelper的Partial生成HtmlString。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Mvc.Html;
  7. using System.Web.Routing;
  8. using System.Text;
  9.  
  10. namespace System.Web.Mvc
  11. {
  12. /// <summary>
  13. /// 分页控件属性
  14. /// </summary>
  15. public class PagerModel
  16. {
  17. /// <summary>
  18. /// 页码控件ID
  19. /// </summary>
  20. public string PagerId { get; set; }
  21. /// <summary>
  22. /// 页码空控件开关
  23. /// </summary>
  24. public bool PagerShow { get; set; }
  25. /// <summary>
  26. /// 当前分组,从1开始
  27. /// </summary>
  28. public int CurTeam { get; set; }
  29. /// <summary>
  30. /// 前一跳页码
  31. /// </summary>
  32. public int PreStep { get; set; }
  33. /// <summary>
  34. /// 当前页码,从1开始
  35. /// </summary>
  36. public int CurPage { get; set; }
  37. /// <summary>
  38. /// 后一跳页码
  39. /// </summary>
  40. public int NextStep { get; set; }
  41. /// <summary>
  42. /// 总页数
  43. /// </summary>
  44. public int TotalPage { get; set; }
  45. /// <summary>
  46. /// 页码分组数
  47. /// </summary>
  48. public int TotalTeam { get; set; }
  49. /// <summary>
  50. /// 当前页码组
  51. /// </summary>
  52. public List<PageModel> PageList { get; set; }
  53.  
  54. }
  55.  
  56. /// <summary>
  57. /// 页码属性
  58. /// </summary>
  59. public class PageModel
  60. {
  61. /// <summary>
  62. /// 页码
  63. /// </summary>
  64. public int PageNumber { get; set; }
  65. }
  66.  
  67. public static class PageHelper
  68. {
  69. public static MvcHtmlString Pager(this HtmlHelper helper,
  70. string pagerId, //分页控件Id
  71. int curPage, //当前页
  72. int pagerSize, //页码个数
  73. int totalSize, //总记录数
  74. int pageSize, //每页记录数
  75. string view //分页模板
  76. )
  77. {
  78. if (curPage<)
  79. {
  80. curPage = ;
  81. }
  82. if (totalSize<)
  83. {
  84. totalSize = ;
  85. }
  86. PagerModel pager = new PagerModel();
  87. pager.PagerId = pagerId;
  88. pager.CurPage = curPage;
  89. pager.TotalPage = (totalSize % pageSize == ) ? (totalSize / pageSize) : (totalSize / pageSize) + ;
  90. if (curPage > pager.TotalPage)
  91. {
  92. curPage = pager.TotalPage;
  93. }
  94. int curTeam = (curPage % pagerSize == ) ? (curPage / pagerSize) : (curPage / pagerSize) + ; //页码当前分组
  95. pager.TotalTeam = (pager.TotalPage % pagerSize == ) ? (pager.TotalPage / pagerSize) : (pager.TotalPage / pagerSize) + ; //页码当前分组
  96. pager.CurTeam = curTeam;
  97. int leftPageNum = (curTeam - )* pagerSize + ;//左边界
  98. pager.PreStep = (leftPageNum - pagerSize) > ? (leftPageNum - pagerSize) : ;
  99. pager.NextStep = (leftPageNum + pagerSize) <= pager.TotalPage ? (leftPageNum + pagerSize) : leftPageNum;
  100. if (pager.TotalPage > )
  101. {
  102. pager.PagerShow = true;//显示分页
  103. List<PageModel> pageList = new List<PageModel>();
  104. int step = (leftPageNum + pagerSize) < pager.TotalPage ? pagerSize : pager.TotalPage % pageSize ;
  105. var sourceList = Enumerable.Range(leftPageNum, step);
  106. pageList.AddRange(sourceList.Select(p => new PageModel{PageNumber = p}));
  107. pager.PageList = pageList;
  108. }
  109. else
  110. {
  111. pager.PagerShow = false;//页数少于一页,则不显示分页
  112. }
  113. return helper.Partial(view, pager);
  114. }
  115. }
  116. }

MVC中的自定义控件——分页的更多相关文章

  1. MVC中的自定义控件

    MVC中的控件都是HtmlHelper的扩展方法(不了解扩展方?法请阅读扩展方法),比如@Html.ActionLink,F12可以看到它是这样写的: public static MvcHtmlStr ...

  2. asp.mvc中的vue分页实例,分页组件无法重置reload,解决点击查询按钮后,分页不刷新的问题

    刚刚接触Vue.js,现在需要做一个查询功能,并且进行服务端分页.主要思路是在页面中注册一个分页组件,然后进行调用.代码如下 1.引用vue.js,具体去网上下载 2.在html的body中添加如下代 ...

  3. .net下MVC中使用Tuple分页查询数据

    主要是在DAL层写查询分页的代码. 例如DAL层上代码: public Tuple<List<WxBindDto>, int> GetMbersInfo(int start, ...

  4. FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 通过对比WebForms和MVC中表格数据库分页代码的不同,可以对 MVC 中的数据流转有更加深入的了解. WebForms 中 ...

  5. MVC中,查询以异步呈现,分页不用异步的解决方案

    MVC中,查询以异步呈现,分页不用异步的解决方案 这种需求,用一个ASPX页面和一个ASCX分部视图就可以解决了,ASPX提供对ASCX的引用,ASCX显示列表信息,ASPX主页面提供查询功能 < ...

  6. datagrid在MVC中的运用01-基本属性并实现分页

    本文体验jQuery EasyUI的datagrid在MVC中的应用.主要涉及到: ※ datagrid的基本属性和方法 ※ datagrid分页在前后台的实现 最终效果: 与视图显示对应的view ...

  7. MVC中实现加载更多

    需要实现的功能: 数据太多想初次加载部分数据,在底部加上“加载更多”按钮 点击后加载第二页数据(从数据库只取指定页数据)后接在已有数据后面(类似于android中的下拉加载更多) 每次加载时显示“正在 ...

  8. 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)

    在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...

  9. Asp.Net MVC中使用ACE模板之Jqgrid

    第一次看到ACE模板,有种感动,有种相见恨晚的感觉,于是迅速来研究.它本身是基于bootstrap和jqueryui,但更nice,整合之后为后台开发节省了大量时间. 发现虽然不是完美,整体效果还是不 ...

随机推荐

  1. JavaIO总结

    Java IO流分为字节流和字符流 下面首先介绍一下字节流 /** * 字节流测试 * @author hc * */ public class Test { public static void m ...

  2. centos 服务开机启动设置

    建立服务文件以nginx 为例 vim /lib/systemd/system/nginx.service 在nginx.service 中插入一下内容 [Unit] Description=ngin ...

  3. 基础笔记6(exception)

    1.异常:一种处理错误的机制,将错误和业务分离. throwable的子类 error 和exception exception 分两类:checked (需要捕获处理或者抛出)和unchecked( ...

  4. 基础笔记5(file)

    file 可以是目录和文件(只是是java程序与系统的文件进行一种关联) File file1 = new File("f:/mytest", "test5.txt&qu ...

  5. JS_call_APP native 与 html的交互

    1.***** 特点:下个版本的交互准备使用这个(http://www.knowsky.com/884428.html) https://github.com/lifei321/JS-OC http: ...

  6. html,css,js加载顺序

    1.js放在head中会立即执行,阻塞后续的资源下载与执行.因为js有可能会修改dom,如果不阻塞后续的资源下载,dom的操作顺序不可控. 正常的网页加载流程是这样的. 浏览器一边下载HTML网页,一 ...

  7. CSS 3 动画2D

    动画分为两种,1,逐帧动画  组成动画的每一个画面就是一帧 2,关键帧动画,确定关键帧电脑会自动过度 动画中如果遇到不兼容的问题也是要加前缀 @-webkit-keyframes规则   @-webk ...

  8. Setup Factory Error3014

    在用Setup Factory打包软件的时候出现Error3014 一般都是由于软件冲突引起的 我的问题是由于杀毒软件 ,在打包的时候关闭杀毒软件 就能成功打包了.

  9. 有关于psExec的使用

    psExec是微软pstools工具包中最常用的一个工具,也是在内网渗透中的免杀渗透利器. psExec能够在命令行下在对方没有开启telnet服务的时候返回一个半交互的命令行,像telnet客户端一 ...

  10. 加强型无穷集合:InfiniteList<T>,可指定遍历方向和偏移量,只要集合有元素并且偏移量不为 0,将永远遍历下去。

    主类: public class InfiniteList<T> : IEnumerable<T> { public List<T> SourceList { ge ...