发布一个从webform改进而来的asp.net mvc分页工具类
我在前面的博客里曾经再次总结过一个webform下使用极广的分页辅助类。本文总结一下asp.net mvc下的简单分页工具类,对于需要从事mvc开发的朋友可以参考一下。这个分页辅助类本质上就是直接使用webform下的分页工具类,再配合HtmlHelper扩展方法稍加改进和包装。所有分页过程可以省却很多代码,而且在View(页面)里调用和webform的方式差不多,使用很方便。
1、webform下的一个分页辅助类
关于webform下的分页工具类的具体使用介绍,您可以参考这一篇。
使用的时候,需要初始化样式,在web.config下可以添加配置:
1 2 3 4 | < appSettings > <!--分页样式--> < add key="PagerStyle" value="PagerCss"/> </ appSettings > |
2、AspNetMvcPager静态类
这个静态类是对MVC下的HtmlHelper添加几个生成分页tag的扩展方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | using System.Collections.Specialized; using System.Text; namespace System.Web.Mvc { using DotNet.Common.WebForm; public static class AspNetMvcPager { public static string RenderPager( this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, System.Web.HttpRequest request) { string url = GenerateURL(request); AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url); string pagerStr = AspNetPagerControl.RenderPager(ctrl); return GeneratePagerString(pagerStr); } public static string RenderPager( this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, string baseString) { AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString); string pagerStr = AspNetPagerControl.RenderPager(ctrl); return GeneratePagerString(pagerStr); } public static string RenderStatisticPager( this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, System.Web.HttpRequest request) { string url = GenerateURL(request); AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url); string pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl); return GeneratePagerString(pagerStr); } public static string RenderStatisticPager( this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, string baseString) { AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString); string pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl); return GeneratePagerString(pagerStr); } private static string GenerateURL(System.Web.HttpRequest request) { StringBuilder url = new StringBuilder(); url.Append(request.Url.AbsolutePath); NameValueCollection collection = request.QueryString; string [] keys = collection.AllKeys; int counter = 0; for ( int i = 0; i < keys.Length; i++) { if (keys[i].ToLower() == "pageindex" ) { continue ; } url.AppendFormat( "{0}{1}={2}" , (counter == 0 ? "?" : "&" ), keys[i], collection[keys[i]]); counter++; } return url.ToString(); } private static string GeneratePagerString( string pagerStr) { TagBuilder builder = new TagBuilder( "div" ); builder.IdAttributeDotReplacement = "_" ; builder.GenerateId(System.Guid.NewGuid().ToString()); builder.InnerHtml = pagerStr; return builder.ToString(); } } } |
3、控制器里查询和传参
在控制器里,view里有时候是通过点击查询按钮(POST方式)进行搜索的,有时候是点击分页链接通过url传参的(GET方式),所以控制查询条件和正确分页,都要在ctroller里做好。本文的示例代码给的代码相当简单,分页参数的获取也非常直接,您可以自己分析一下。
4、页面调用
和webform下类似,通过<%= %>直接绑定进行页面呈现:
1 2 3 4 5 6 7 | <%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%> <%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%> <%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, string .Format( "{0}?firstname={1}&lastname={2}" , HttpContext.Current.Request.Url.AbsolutePath,pager.FirstName,pager.LastName))%> <%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, string .Format( "{0}?firstname={1}&lastname={2}" , HttpContext.Current.Request.Url.AbsolutePath, pager.FirstName, pager.LastName))%> |
总体来说,使用起来非常简单,其中传参和url的确定是重点。
需要说明的是,mvc和webform非常明显不同的一个地方,就是mvc对url 进行了重写,一不小心就可能造成404错误发生的惨剧,所以您在传参的时候务必注意。
有图有真相:
示例下载:MvcApp
作者:Jeff Wong
出处:http://jeffwongishandsome.cnblogs.com/
本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构