宝哥软件园

MVC默认路由实现分页(从PagerExtend.dll下载)

编辑:宝哥软件园 来源:互联网 时间:2021-09-08

这两天群里有人问有没有现成的。net mvc分页方法,并编写了简单的分页工具。这里简单分享一下实现思路和代码,希望对大家有所帮助,鼓励大家多造轮子还是有好处的。

A.效果(此处使用引导风格)

B.分析,知识点

A.分页通常由以下属性(当前页、总页数、分页记录数、路由地址)组成,从这四项基本上可以实现分页,再加上一个控制样式的参数

B.验证各种数字,计算总页数(如果总页数和分页记录数不能整除,那么最终的除法结果是1)

C.下一页和上一页的按钮都是零点,需要判断是最后一页还是第一页才能显示当前页码的连续增减

D.因为需要在cshtml文件中显示分页效果,所以需要使用HtmlHelper扩展方法;延伸方法这里,我们简单说一下注意事项:关键字this

对应于扩展方法的类必须是静态的,方法本身也是静态的

扩展方法对应的类后缀通常由扩展修改

E.请尝试@Html页面。PageExtend直接调用分页方法

C.代码表示

A.分页方法实现类

使用系统;使用系统。集合。通用;使用系统Linq .使用系统。文字;使用系统。线程化。任务;使用系统网络。手动音量调节命名空间页面扩展{公共静态类HTMl助手扩展}{区域#分页扩展PageExtend ///summary ///分页选择权属性////摘要公共类MoPagerOption { ///摘要///当前页必传////summary public int CurrentPage { get;设置;} ///摘要///总条数必传////summary public int Total { get;设置;} ///摘要///分页记录数(每页条数默认每页15条)////summary public int页面大小{ get设置;} ///摘要///路由地址(格式如:/控制器/动作)默认自动获取////摘要公共字符串RouteUrl { get设置;} ///摘要///样式默认引导程序样式1////summary public int style num { get;设置;} } ///摘要///分页扩展方法////summary////param name=' helper ' html试图/param ///param name='option '分页属性/param ///returnshtml样式/返回公共静态MvcHtmlString页面扩展(此HtmlHelper助手,MoPagerOption选项){ if(选项.page SiZe=0){ 0选项页面大小=15}如果(选项CurrentPage=0) { option .当前页面=1;}如果(选项Total=0) {返回MvcHtmlString .空的;} //总页数var totalPage=选项。合计/选项。页面大小(选项。总百分比选项。页面大小0?1 : 0);if(TotalPage=0){ 0返回MvcHtmlString .创建('分页异常');} //当前路由地址如果(字符串IsNullOrEmpty(选项路由器R1)){选项.RouteUrl=helper .查看上下文。httpcontext。请求。rawURlif(!字符串IsNullOrEmpty(选项路由器R1){ var last index=option .路由器R1。的最后一个索引('/');选项RouteUrl=选项路特尔。子字符串(0,最后一个索引);} }选项RouteUrl=选项路特尔。TrimEnd('/');//构造分页样式var sbPage=new StringBuilder(字符串。空的);开关(选项. StyleNum){ case 2: { break;}默认值: { #地区默认样式sbPage .追加(“nav”);sbPage .追加(' ul类= '分页 ');sbPage .AppendFormat(' lia href= ' { 0 }/{ 1 } ' aria-label= ' Previous ' span aria-hidden= ' true '/span/a/Li ',选项RouteUrl,选项CurrentPage - 1=0?1 :选项当前页面-1);for(int I=1;i=totalPagei ) { sbPage .AppendFormat(' Li { 1 } a href= ' { 2 }/{ 0 } ' { 0 }/a/Li ',I,i==选项。当前页面?class='active'' : ' ',选项路由器R1);} sbPage .追加(“李”);sbPage .AppendFormat(' a href= ' { 0 }/{ 1 } ' aria-label= ' Next ',选项RouteUrl,选项。当前页面一合计页面?选项当前页面:选项当前第1页);sbPage .追加(' span aria-hidden= ' true '/span ');sbPage .追加('/a ');sbPage .追加('/Li ');sbPage .追加('/ul ');sbPage .追加('/nav ');# endregion } break}返回MvcHtmlString .创建(第二页.ToString());} #endregion }}b。视图测试调用

@使用page extend @ model IEnumerableXinSheng .API。控制器。moairticletable URl:@ viewpag .Url @foreach(模型中的定义变量项目){ tr td@item.Title/td td@item.Author/td td@item.CreateTime/td/tr }/table @ Html .页面扩展(视图包寻呼机选项作为HtmlHelperExtensions .控制器测试

使用PagerExtend使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节使用系统。网络安全;命名空间新生Api。控制器{[可序列化]公共类MoAirticle {公共字符串标题{ get设置;}公共字符串作者{ get设置;}公共日期时间创建时间{获取设置;} }公共类HomeController :控制器{公共操作结果索引(int id){ viewpag .Title='测试分页;ListMoAirticle moAirticles=new ListMoAirticle();for(int I=1;i 50i ) { moAirticles .添加(新的MoAirticle {作者='神牛步行I,CreateTime=DateTime .现在,标题='博客园之I });} ViewBag .网址=请求RawUrl//初始化分页基础信息var选项=新的HTMl助手扩展.MoPagerOption { CurrentPage=id,PageSize=15,Total=moAirticles .计数};//动态传递分页属性视图包page option=option var articles=moAirticles .跳过((选项当前页面- 1) *选项。页面大小)。取(选项。页面大小)。to list();返回视图(文章);} }}D .分页PagerExtend.dll下载地址:PagerExtend.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

更多资讯
游戏推荐
更多+