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

Intro

之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, 自定义分页 pager 越来越容易扩展了。

HtmlHelper Pager扩展

Pager V1.0

  1. /// <summary>

  2. /// Pager V1.0

  3. /// </summary>

  4. /// <param name="helper">HtmlHelper</param>

  5. /// <param name="pager">分页信息</param>

  6. /// <returns></returns>

  7. public static MvcHtmlString Pager(this HtmlHelper helper, PagerModel pager)

  8. {

  9. StringBuilder sbHtmlText = new StringBuilder();

  10. sbHtmlText.Append("<div style=\"text-align:center\"><nav><ul class=\"pagination\">");

  11. if (pager.PageIndex <= 1)

  12. {

  13. sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>");

  14. }

  15. else

  16. {

  17. sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData(1)\" aria-label=\"1\"><span aria-hidden=\"true\">«</span></a></li>", pager.PageIndex - 1);

  18. sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData({0})\">{0}</a></li>", pager.PageIndex - 1);

  19. }

  20. sbHtmlText.AppendFormat("<li class=\"active\"><a href=\"javascript:void(0)\">{0}<span class=\"sr-only\">(current)</span></a></li>", pager.PageIndex);

  21. if (pager.PageIndex >= pager.PageCount)

  22. {

  23. sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Next\"><span aria-hidden=\"true\">»</span></a></li>");

  24. }

  25. else

  26. {

  27. sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData({0})\">{0}</a></li>", pager.PageIndex + 1);

  28. sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData({0})\" aria-label=\"Next\"><span aria-hidden=\"true\">»</span></a></li>", pager.PageIndex + 1);

  29. }

  30. sbHtmlText.Append("</ul></nav>");

  31. sbHtmlText.AppendFormat("<div><span>每页有<strong>{0}</strong>条数据,一共有<strong>{1}</strong>页,总计<strong>{2}</strong>条数据</span></div></div>", pager.PageSize, pager.PageCount, pager.TotalCount);

  32. return MvcHtmlString.Create(sbHtmlText.ToString());

  33. }

Pager V2.0

  1. /// <summary>

  2. /// Pager V2.0

  3. /// </summary>

  4. /// <param name="helper">HtmlHelper</param>

  5. /// <param name="pager">分页信息</param>

  6. /// <param name="onPageChange">翻页事件</param>

  7. /// <returns></returns>

  8. public static MvcHtmlString Pager(this HtmlHelper helper, PagerModel pager, Func<int, string> onPageChange)

  9. {

  10. StringBuilder sbHtmlText = new StringBuilder();

  11. sbHtmlText.Append("<div style=\"text-align:center\"><nav><ul class=\"pagination\">");

  12. if (pager.PageIndex <= 1)

  13. {

  14. sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>");

  15. }

  16. else

  17. {

  18. sbHtmlText.AppendFormat("<li><a href=\"{0}\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>", onPageChange(pager.PageIndex - 1));

  19. sbHtmlText.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", onPageChange(pager.PageIndex - 1), pager.PageIndex - 1);

  20. }

  21. sbHtmlText.AppendFormat("<li class=\"active\"><a href=\"javascript:void(0)\">{0}<span class=\"sr-only\">(current)</span></a></li>", pager.PageIndex);

  22. if (pager.PageIndex >= pager.PageCount)

  23. {

  24. sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Next\"><span aria-hidden=\"true\">»</span></a></li>");

  25. }

  26. else

  27. {

  28. sbHtmlText.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", onPageChange(pager.PageIndex + 1), pager.PageIndex + 1);

  29. sbHtmlText.AppendFormat("<li><a href=\"{0}\" aria-label=\"Next\"><span aria-hidden=\"true\">»</span></a></li>", onPageChange(pager.PageIndex + 1));

  30. }

  31. sbHtmlText.Append("</ul></nav>");

  32. sbHtmlText.AppendFormat("<div><span>每页有<strong>{0}</strong>条数据,一共有<strong>{1}</strong>页,总计<strong>{2}</strong>条数据</span></div></div>", pager.PageSize, pager.PageCount, pager.TotalCount);

  33. return MvcHtmlString.Create(sbHtmlText.ToString());

  34. }

Pager V3.0

  1. /// <summary>

  2. /// Pager V3.0

  3. /// </summary>

  4. /// <param name="helper">HtmlHelper</param>

  5. /// <param name="pager">分页信息</param>

  6. /// <param name="onPageChange">翻页地址或事件</param>

  7. /// <param name="pagerViewName">分页分部视图名称</param>

  8. /// <param name="displayMode">分页显示模式</param>

  9. /// <returns></returns>

  10. public static MvcHtmlString Pager(this HtmlHelper helper, PagerModel pager, Func<int, string> onPageChange, string pagerViewName, PagingDisplayMode displayMode = PagingDisplayMode.Always)

  11. {

  12. pager.OnPageChange = onPageChange;

  13. pager.PagingDisplayMode = displayMode;

  14. return MvcHtmlString.Create(helper.Partial(pagerViewName, pager).ToHtmlString());

  15. }

Summary

Pager V1.0 分页样式和翻页事件如果要修改都要修改 CSharp 代码

Pager V2.0 可以自定义翻页事件,但是要修改分页样式还是要修改 CSharp 代码

Pager V3.0 可以在自定义分页分部视图中修改翻页事件或地址和分页样式,可以实现样式数据代码的分离

End

自定义 MvcSimplePager 项目和示例代码:https://github.com/WeihanLi/MvcSimplePager

对于 asp.net core 也是支持的哟 (^U^)ノ~YO

asp.net mvc 自定义 pager 封装与优化相关推荐

  1. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  2. ASP.NET MVC 自定义Razor视图WorkContext

    概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...

  3. ASP.net MVC自定义错误处理页面的方法

    在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那 ...

  4. Asp.Net MVC 自定义的MVC框架(非EF操作数据库)

    一些废话:在北京辞职回家不知不觉中已经半年多了,这半年中有过很多的彷徨,困惑,还有些小小难受.半年时间算是我人生以来遇到过的最困苦的时候.理想的工作跟我擦肩而过,驾照也没有考过,年后这一改革...,毕 ...

  5. 【转】ASP.net MVC自定义错误处理页面的方法

    在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那 ...

  6. Asp.net mvc自定义route实现国际化

    2019独角兽企业重金招聘Python工程师标准>>> 缘起 最近做的一个网站项目要求中英文双语 之前也有一个网站要求中英双语切换,但当时使用的是webform,结果URL类似Per ...

  7. ASP.NET MVC 对于视图引擎的优化

    我经常使用asp.net MVC框架来做网站.总的来说,MVC框架是一个非常优秀的框架.相对于曾经的web form模式,我个人感觉分工更加合理思路也更加清晰,但是交给开发人员的工作也相对变多了. 当 ...

  8. ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

    阅读目录 1.前言 2.AuthorizeAttribute登录特性解释 3.代码示例 1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebFo ...

  9. ASP.NET mvc 自定义验证和Filter过滤器传参

    在WEBfrom时代 membership作为系统默认的身份验证提供程序,貌似很好用,但ASP.NET没有开源,我们又不能百分之百的按照微软默认商务方式去进行验证,有无力去彻底重写这个东西,所以mem ...

最新文章

  1. 计蒜客 - Distance on the tree(LCA+主席树)
  2. 获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求
  3. 给你的博客换个装-园子换装指南
  4. [Leetcode][第117题][JAVA][填充每个节点的下一个右侧节点指针][BFS]
  5. Install Python 3.6 on Ubuntu 16.04, from source
  6. 系统设计(二)——TinyURL系统设计
  7. JAVA通过Jemter工具并发测试
  8. 短信系统通道路由的设计和思路-移讯云短信系统
  9. stm32串口通信以及C语言程序里的内存分配
  10. 卓有成效的管理者—第一章 卓有成效是可以学会的
  11. IT常用职位缩写总结
  12. css画心形原理,如何用 css 画一个心形
  13. JAVA基础(for语句的统计思想)
  14. Ubuntu 安装 uWSGI
  15. 硬核图书系列:《漫画算法:小灰的算法之旅》
  16. Layui数据表格显示无数据提示问题
  17. 最长不下降子序列O(NlogN) 输出序列
  18. GDIplus学习--业精于勤荒于嬉,行成于思毁于随
  19. 2021五一建模疫苗生产消防救援数据驱动的异常检测与预警分析
  20. 闲鱼无货源赚钱的核心玩法?

热门文章

  1. C#备份数据和还原数据
  2. 因特网使用期限_Internet死亡时使用PC的其他方式
  3. Linux就该这么学---第七章(LVM逻辑卷管理器)
  4. AppleScript: Handler
  5. rails generator
  6. 演示: 动态NAT完成网络地址翻译
  7. [旧博客]Python 第一次
  8. 关于Virtual-Hosting的理解
  9. ABP vNext微服务架构详细教程——项目部署
  10. 如何将 DateTime 转成 UnixTime ?