正在做一个基本于MVC的项目,要用到分页,于是花了点时间,自已写了一个!

功能和效果和http://www.cnblogs.com/的完全一样,呵呵!

比cnblogs的多了一点点小东西,可以输入分页码跳转.

注:转载请注明:0x001.com原创,下载请看附件,在项目中引用即可

下载地址:Sov.pager.dll

运行效果:

Html Helper的代码:

 1 namespace System.Web.Mvc
 2 {
 3     public static class PagerHelper
 4     {
 5         private const int defaultDisplayCount = 11;
 6 
 7         #region HtmlHelper Extensions
 8 
 9         /// <summary>
10         /// Pager Helper Extensions
11         /// </summary>
12         /// <param name="htmlHelper"></param>
13         /// <param name="currentPage">当前页码</param>
14         /// <param name="pageSize">页面显示的数据条目</param>
15         /// <param name="totalCount">总记录数</param>
16         /// <param name="toDisplayCount">Helper要显示的页数</param>
17         /// <returns></returns>
18         public static string Pager(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount, int toDisplayCount)
19         {                     
20             RenderPager pager = new RenderPager(htmlHelper.ViewContext,currentPage, pageSize,totalCount,toDisplayCount);
21 
22             return pager.RenderHtml();
23         }
24 
25         /// <summary>
26         /// Pager Helper Extensions
27         /// </summary>
28         /// <param name="htmlHelper"></param>
29         /// <param name="currentPage">当前页码</param>
30         /// <param name="pageSize">页面显示的数据条目</param>
31         /// <param name="totalCount">总记录数</param>
32         /// <returns></returns>
33         public static string Pager(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount)
34         {
35             RenderPager pager = new RenderPager(htmlHelper.ViewContext, currentPage, pageSize, totalCount,defaultDisplayCount);
36 
37             return pager.RenderHtml();
38         }
39 
40         /// <summary>
41         /// IEnumerable extensions
42         /// </summary>
43         public static PageList<T> ToPageList<T>(this IEnumerable<T> source, int pageIndex, int pageSize, int totalCount)
44         {
45             return new PageList<T>(source, pageIndex, pageSize, totalCount);
46         }
47 
48         #endregion
49     }
50 }

输出显示代码:

  1 namespace Sov.Pager
  2 {
  3     public class RenderPager
  4     {
  5         #region 字段
  6 
  7         /// <summary>
  8         /// 当前页面的ViewContext
  9         /// </summary>
 10         private ViewContext viewContext;
 11         /// <summary>
 12         /// 当前页码
 13         /// </summary>
 14         private readonly int currentPage;
 15         /// <summary>
 16         /// 页面要显示的数据条数
 17         /// </summary>
 18         private readonly int pageSize;
 19         /// <summary>
 20         /// 总的记录数
 21         /// </summary>
 22         private readonly int totalCount;
 23         /// <summary>
 24         /// Pager Helper 要显示的页数
 25         /// </summary>
 26         private readonly int toDisplayCount;
 27 
 28         private readonly string pagelink;
 29 
 30         #endregion
 31 
 32         #region 构造函数
 33 
 34         public RenderPager(ViewContext viewContext, int currentPage, int pageSize, int totalCount, int toDisplayCount)
 35         {
 36             this.viewContext = viewContext;
 37             this.currentPage = currentPage;
 38             this.pageSize = pageSize;
 39             this.totalCount = totalCount;
 40             this.toDisplayCount = toDisplayCount;
 41 
 42 
 43             string reqUrl = viewContext.RequestContext.HttpContext.Request.RawUrl;
 44             string link = "";
 45 
 46             Regex re = new Regex(@"page=(\d+)|page=", RegexOptions.IgnoreCase);
 47 
 48             MatchCollection results = re.Matches(reqUrl);
 49 
 50             if (results.Count > 0)
 51             {
 52                 link = reqUrl.Replace(results[0].ToString(), "page=[%page%]");
 53             }
 54             else if (reqUrl.IndexOf("?") < 0)
 55             {
 56                 link = reqUrl + "?page=[%page%]";
 57             }
 58             else
 59             {
 60                 link = reqUrl + "&page=[%page%]";
 61             }
 62             this.pagelink = link;
 63         }
 64 
 65         #endregion
 66 
 67         #region 方法
 68 
 69         public string RenderHtml()
 70         {
 71             if (totalCount <= pageSize)
 72                 return string.Empty;
 73 
 74             //总页数
 75             int pageCount = (int)Math.Ceiling(this.totalCount / (double)this.pageSize);
 76 
 77             //起始页
 78             int start = 1;
 79 
 80             //结束页
 81             int end = toDisplayCount;
 82             if (pageCount < toDisplayCount) end = pageCount;
 83 
 84             //中间值
 85             int centerNumber = toDisplayCount / 2;
 86 
 87             if (pageCount > toDisplayCount)
 88             {
 89 
 90                 //显示的第一位
 91                 int topNumber = currentPage - centerNumber;
 92 
 93                 if (topNumber > 1)
 94                 {
 95                     start = topNumber;
 96                 }
 97 
 98                 if (topNumber > pageCount - toDisplayCount)
 99                 {
100                     start = pageCount - toDisplayCount + 1;
101                 }
102 
103                 //显示的最后一位
104                 int endNumber = currentPage + centerNumber;
105 
106                 if (currentPage >= pageCount - centerNumber)
107                 {
108                     end = pageCount;
109                 }
110                 else
111                 {
112                     if (endNumber > toDisplayCount)
113                     {
114                         end = endNumber;
115                     }
116                 }
117 
118             }
119 
120             StringBuilder sb = new StringBuilder();
121 
122             //Previous
123             if (this.currentPage > 1)
124             {
125                 sb.Append(GeneratePageLink("&lt; Prev", this.currentPage - 1));
126             }
127 
128             if (start > 1)
129             {
130                 sb.Append(GeneratePageLink("1", 1));
131                 sb.Append("...");
132             }
133 
134             //end Previous
135 
136             for (int i = start; i <= end; i++)
137             {
138                 if (i == this.currentPage)
139                 {
140                     sb.AppendFormat("<span class=\"current\">{0}</span>", i);
141                 }
142                 else
143                 {
144                     sb.Append(GeneratePageLink(i.ToString(), i));
145                 }
146             }
147 
148             //Next
149             if (end < pageCount)
150             {
151                 sb.Append("...");
152                 sb.Append(GeneratePageLink(pageCount.ToString(), pageCount));
153             }
154 
155             if (this.currentPage < pageCount)
156             {
157                 sb.Append(GeneratePageLink("Next &gt;", this.currentPage + 1));
158             }
159             //end Next
160 
161             sb.Append("<span><input type=\"text\" class=\"pagerInput\" id=\"pagerInput\" maxlength=\"4\" οnkeypress=\"return event.keyCode>=48&&event.keyCode<=57\"/></span>");
162             sb.Append("<span><input type=\"button\" value=\"跳转\" class=\"pagerButton\" οnclick=\"if (!isNaN(parseInt(pagerInput.value))) window.location='" + this.pagelink.Replace("[%page%]", "") + "'+pagerInput.value;\"/></span>");
163 
164             return sb.ToString();
165         }
166 
167         /// <summary>
168         /// 生成Page的链接
169         /// </summary>
170         /// <param name="linkText">文字</param>
171         /// <param name="PageNumber">页码</param>
172         /// <returns></returns>
173         private string GeneratePageLink(string linkText, int PageNumber)
174         {
175 
176             string linkFormat = string.Format("<a href=\"{0}\">{1}</a>", this.pagelink.Replace("[%page%]", PageNumber.ToString()), linkText);
177 
178             return linkFormat;
179 
180         }
181 
182         #endregion
183     }
184 }
185 

PageList封装Model代码:

 1 namespace System.Web.Mvc
 2 {
 3     public class PageList<T>:List<T>
 4     {
 5         /// <summary>
 6         /// 当前分页
 7         /// </summary>
 8         public int PageIndex { get; private set; }
 9         /// <summary>
10         /// 显示数据条目
11         /// </summary>
12         public int PageSize { get; private set; }
13         /// <summary>
14         /// 总页数
15         /// </summary>
16         public int TotalCount { get; private set; }
17 
18         public PageList(IEnumerable<T> source, int pageIndex, int pageSize, int totalCount)
19         {
20             PageIndex = pageIndex;
21 
22             PageSize = pageSize;
23 
24             TotalCount = totalCount;
25 
26             AddRange(source);
27         }
28     }
29 }

使用的时候,可自定义CSS,以下是我自用的CSS:

 1 /* Pager */
 2 .pager
 3 {
 4     font-size: 12px;
 5     margin: 8px 0;
 6     padding: 3px 0 3px;
 7     text-align: left;
 8 }
 9 
10 .pager .current
11 {
12     background-color: #06c;
13     border: 1px solid #009;
14     color: #fff;
15     font-weight: bold;
16     margin-top: 4px;
17     padding: 3px 5px;
18     text-align: center;
19 }
20 
21 .pager a
22 {
23     margin: 4px 3px;
24     border: 1px solid #9AAFE5;
25     padding: 3px 5px;
26     text-align: center;
27     text-decoration: none;
28     color: #2E6AB1;
29 }
30 
31 .pager .pagerInput
32 {
33     padding: 3px 0 0 0;
34     border: 1px solid #9AAFE5;
35     text-align: center;
36     text-decoration: none;
37     height: 16px;
38     width: 30px;
39 }
40 .pager .pagerButton
41 {
42     border: 1px solid #9AAFE5;
43     cursor: pointer;
44 }

ASP.NET MVC中使用方法如下:

Controller Action

 1 /// <summary>
 2 /// 获取角色列表
 3 /// </summary>
 4 /// <returns></returns>
 5 private List<RBAC_Role> RoleList(int? page)
 6 {
 7     if (!page.HasValue)
 8     {
 9         page = 1;
10     }
11     int total = 0;
12     int pageSize = 2;
13 
14     //获得角色数据列表
15     List<RBAC_Role> roleItems = Bll.GetPageData(page.Value,pageSize,ref total);
16 
17     return roleItems.ToPageList(page.Value, pageSize, total);
18 }

现在在View里面的头部加上Model类型并只需要如下调用:

1 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PageList<Entity.RBAC_Role>>" %>  
<div class="pager">  
    <%= Html.Pager(Model.PageIndex,Model.PageSize,Model.TotalCount) %>  
</div>  

这样使用起来是非常方便的!欢迎大家使用

转载于:https://www.cnblogs.com/0x001/archive/2010/01/12/1645965.html

ASP.NET MVC Pager Helper Extensions相关推荐

  1. ASP.NET MVC:@helper 不能调试

    ASP.NET MVC 的 @helper 不能设置断点,当然我们可以将逻辑移动到扩展方法中,这里介绍另外一种方式,使用:System.Diagnostics.Debug.WriteLine,编程旅途 ...

  2. asp.net mvc 包含了一个 html 的助手类在哪里,c# - 在App_Code中使用@HTML的ASP.NET MVC Razor Helper - 堆栈内存溢出...

    我尝试在cshtml文件中的App_Code中创建一个Helper. // Using's are needed to ensure helpers function correctly. @usin ...

  3. Asp.net MVC Pager分页实现

    预备内容 转载于:https://www.cnblogs.com/daochangone/p/9322402.html

  4. Asp.Net MVC HTML Helper 中 LabelFor TextBoxFor的一些理解

    在视图中经常会使用 HTML扩展来进行界面的编写,一些元素如下所示: HTML Element Helpers: Html.TextBoxFor() Html.TextAreaFor() Html.D ...

  5. New %: % Syntax for HTML Encoding Output in ASP.NET 4 (and ASP.NET MVC 2)

    <%: %>这有助于保护您的应用程序和网站对注射跨站点脚本(XSS)和HTML注入攻击,并使您能够使用一个漂亮简洁的语法. HTML Encoding Cross-site script ...

  6. asp.net mvc 自定义 pager 封装与优化

    asp.net mvc 自定义 pager 封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, ...

  7. ASP.NET Core MVC – Tag Helper 组件

    ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...

  8. (转)[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper

    原文地址:http://weblogs.asp.net/stephenwalther/archive/2008/06/13/asp-net-mvc-tip-1-creating-new-html-he ...

  9. ASP.NET MVC 重点教程一周年版 第八回 Helper之演化 【转】

    凡事出现必有原因 就像Filter,它是为了解决在一类的Action之前或之后执行统一的代码而产生的. 而Helper则是为了方便View的开发而产生的. 下面我们来解决几个问题,来看看Helper是 ...

最新文章

  1. netfilter的笔记3--那些内置的表
  2. spring beans源码解读之--总结篇
  3. 服务器文档怎么打开,服务器链接怎么打开
  4. leetcode 581. 最短无序连续子数组(详解普通 / 进阶 / 单调栈解法,Java版)
  5. python 视图对象_python web框架篇:views视图函数
  6. 微软借Bletchley项目将云计算信息加入区块链
  7. 函数wait、waitpid、孤儿进程、僵尸进程
  8. 八皇后问题 (信息学奥赛一本通-T1213)
  9. Android UI学习之Dialog
  10. 管理感悟:人才是发现的,不是培养的
  11. orm php 自定义,Eloquent ORM 自定义 builder
  12. AE插件/Trapcode Suite安装错误/error
  13. python官网下载-Python3.7.0 官方版官方版下载
  14. linux下lamealsa进行音频流操作(八)用ffmpeg将mp3转为wav
  15. 计算机网络 如何算 子网号,计算机网络的划分以及主机号子网号的计算方法
  16. 华为各类工程师通信基础面试题目及答案
  17. 偏差,残差,方差在机器学习中的区别
  18. ssm+mysql+基于微信小程序的恋上诗词设计与实现 毕业设计-附源码011431
  19. 做一个微信小程序多少钱?
  20. 三位一体报考计算机专业自我介绍,考三位一体招生自我介绍范文

热门文章

  1. 无人驾驶的规划与控制(一)——路由寻径
  2. VC++6.0 单步调试
  3. oracle delphi唱盘,经典再升级 Oracle Delphi MK VI Gen 2
  4. android常见的面试题,Android常见笔试面试题
  5. php 模拟客户端访问,PHP通过伪造和模拟客户端COOKIE登陆来采集抓取远程网址
  6. ubuntu18.04配置远程服务器:安装ssh
  7. MakerDAO新增renBTC和UNI作为Dai抵押品
  8. powerdesigner导出mysql数据库表结构到Excel
  9. git tag打标签常用命令
  10. CPA00 01 02