ASP.NET MVC Pager Helper Extensions
正在做一个基本于MVC的项目,要用到分页,于是花了点时间,自已写了一个!
功能和效果和http://www.cnblogs.com/的完全一样,呵呵!
比cnblogs的多了一点点小东西,可以输入分页码跳转.
注:转载请注明:0x001.com原创,下载请看附件,在项目中引用即可
下载地址:Sov.pager.dll
运行效果:
Html Helper的代码:
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 }
输出显示代码:
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("< 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 >", 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代码:
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:
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
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类型并只需要如下调用:
<%= 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相关推荐
- ASP.NET MVC:@helper 不能调试
ASP.NET MVC 的 @helper 不能设置断点,当然我们可以将逻辑移动到扩展方法中,这里介绍另外一种方式,使用:System.Diagnostics.Debug.WriteLine,编程旅途 ...
- 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 ...
- Asp.net MVC Pager分页实现
预备内容 转载于:https://www.cnblogs.com/daochangone/p/9322402.html
- Asp.Net MVC HTML Helper 中 LabelFor TextBoxFor的一些理解
在视图中经常会使用 HTML扩展来进行界面的编写,一些元素如下所示: HTML Element Helpers: Html.TextBoxFor() Html.TextAreaFor() Html.D ...
- New %: % Syntax for HTML Encoding Output in ASP.NET 4 (and ASP.NET MVC 2)
<%: %>这有助于保护您的应用程序和网站对注射跨站点脚本(XSS)和HTML注入攻击,并使您能够使用一个漂亮简洁的语法. HTML Encoding Cross-site script ...
- asp.net mvc 自定义 pager 封装与优化
asp.net mvc 自定义 pager 封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, ...
- ASP.NET Core MVC – Tag Helper 组件
ASP.NET Core Tag Helpers系列目录,这是第五篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...
- (转)[翻译] 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 ...
- ASP.NET MVC 重点教程一周年版 第八回 Helper之演化 【转】
凡事出现必有原因 就像Filter,它是为了解决在一类的Action之前或之后执行统一的代码而产生的. 而Helper则是为了方便View的开发而产生的. 下面我们来解决几个问题,来看看Helper是 ...
最新文章
- netfilter的笔记3--那些内置的表
- spring beans源码解读之--总结篇
- 服务器文档怎么打开,服务器链接怎么打开
- leetcode 581. 最短无序连续子数组(详解普通 / 进阶 / 单调栈解法,Java版)
- python 视图对象_python web框架篇:views视图函数
- 微软借Bletchley项目将云计算信息加入区块链
- 函数wait、waitpid、孤儿进程、僵尸进程
- 八皇后问题 (信息学奥赛一本通-T1213)
- Android UI学习之Dialog
- 管理感悟:人才是发现的,不是培养的
- orm php 自定义,Eloquent ORM 自定义 builder
- AE插件/Trapcode Suite安装错误/error
- python官网下载-Python3.7.0 官方版官方版下载
- linux下lamealsa进行音频流操作(八)用ffmpeg将mp3转为wav
- 计算机网络 如何算 子网号,计算机网络的划分以及主机号子网号的计算方法
- 华为各类工程师通信基础面试题目及答案
- 偏差,残差,方差在机器学习中的区别
- ssm+mysql+基于微信小程序的恋上诗词设计与实现 毕业设计-附源码011431
- 做一个微信小程序多少钱?
- 三位一体报考计算机专业自我介绍,考三位一体招生自我介绍范文
热门文章
- 无人驾驶的规划与控制(一)——路由寻径
- VC++6.0 单步调试
- oracle delphi唱盘,经典再升级 Oracle Delphi MK VI Gen 2
- android常见的面试题,Android常见笔试面试题
- php 模拟客户端访问,PHP通过伪造和模拟客户端COOKIE登陆来采集抓取远程网址
- ubuntu18.04配置远程服务器:安装ssh
- MakerDAO新增renBTC和UNI作为Dai抵押品
- powerdesigner导出mysql数据库表结构到Excel
- git tag打标签常用命令
- CPA00 01 02