MVC默认路由实现分页-PagerExtend.dll
2018-06-22 06:00:22来源:未知 阅读 ()
这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的。
A.效果(这里用了bootstrap的样式)
B.分析,知识点
a.分页通常由一下几个属性组成(当前页,总条数,分页记录数,路由地址),由此四项基本就能实现分页了,在加上一个控制样式的参数
b.各种数字的验证,计算总页数(如果总条数和分页记录数不能整除,那么最后相除的结果再+1)
c.下一页和上一下的按钮是零界点,需要判断是否是最后一页或者第一页来显示当前页数的继续增加或者减小
d.因为需要在cshtml文件中展示分页的效果,所以需要用到HtmlHelper扩展方法;扩展方法这里简单说下注意项:
.关键词this
.扩展方法对应的clas必须静态,该方法本身也是静态
.扩展方法对应的class后缀一般是Extensions修饰
e.试图页面@Html.PageExtend直接调用分页方法
C.代码展示
a.分页方法实现类
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Web.Mvc; 7 8 namespace PagerExtend 9 { 10 public static class HtmlHelperExtensions 11 { 12 13 #region 分页扩展 PageExtend 14 15 /// <summary> 16 /// 分页option属性 17 /// </summary> 18 public class MoPagerOption 19 { 20 /// <summary> 21 /// 当前页 必传 22 /// </summary> 23 public int CurrentPage { get; set; } 24 /// <summary> 25 /// 总条数 必传 26 /// </summary> 27 public int Total { get; set; } 28 29 /// <summary> 30 /// 分页记录数(每页条数 默认每页15条) 31 /// </summary> 32 public int PageSize { get; set; } 33 34 /// <summary> 35 /// 路由地址(格式如:/Controller/Action) 默认自动获取 36 /// </summary> 37 public string RouteUrl { get; set; } 38 39 /// <summary> 40 /// 样式 默认 bootstrap样式 1 41 /// </summary> 42 public int StyleNum { get; set; } 43 } 44 45 /// <summary> 46 /// 分页扩展方法 47 /// </summary> 48 /// <param name="helper">html试图</param> 49 /// <param name="option">分页属性</param> 50 /// <returns>html样式</returns> 51 public static MvcHtmlString PageExtend(this HtmlHelper helper, MoPagerOption option) 52 { 53 54 if (option.PageSize <= 0) { option.PageSize = 15; } 55 if (option.CurrentPage <= 0) { option.CurrentPage = 1; } 56 if (option.Total <= 0) { return MvcHtmlString.Empty; } 57 58 //总页数 59 var totalPage = option.Total / option.PageSize + (option.Total % option.PageSize > 0 ? 1 : 0); 60 if (totalPage <= 0) { return MvcHtmlString.Create("分页异常"); } 61 //当前路由地址 62 if (string.IsNullOrEmpty(option.RouteUrl)) 63 { 64 65 option.RouteUrl = helper.ViewContext.HttpContext.Request.RawUrl; 66 if (!string.IsNullOrEmpty(option.RouteUrl)) 67 { 68 69 var lastIndex = option.RouteUrl.LastIndexOf("/"); 70 option.RouteUrl = option.RouteUrl.Substring(0, lastIndex); 71 } 72 } 73 option.RouteUrl = option.RouteUrl.TrimEnd('/'); 74 75 //构造分页样式 76 var sbPage = new StringBuilder(string.Empty); 77 switch (option.StyleNum) 78 { 79 case 2: 80 { 81 break; 82 } 83 default: 84 { 85 #region 默认样式 86 87 sbPage.Append("<nav>"); 88 sbPage.Append(" <ul class=\"pagination\">"); 89 sbPage.AppendFormat(" <li><a href=\"{0}/{1}\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>", 90 option.RouteUrl, 91 option.CurrentPage - 1 <= 0 ? 1 : option.CurrentPage - 1); 92 93 for (int i = 1; i <= totalPage; i++) 94 { 95 96 sbPage.AppendFormat(" <li {1}><a href=\"{2}/{0}\">{0}</a></li>", 97 i, 98 i == option.CurrentPage ? "class=\"active\"" : "", 99 option.RouteUrl); 100 101 } 102 103 sbPage.Append(" <li>"); 104 sbPage.AppendFormat(" <a href=\"{0}/{1}\" aria-label=\"Next\">", 105 option.RouteUrl, 106 option.CurrentPage + 1 > totalPage ? option.CurrentPage : option.CurrentPage + 1); 107 sbPage.Append(" <span aria-hidden=\"true\">»</span>"); 108 sbPage.Append(" </a>"); 109 sbPage.Append(" </li>"); 110 sbPage.Append(" </ul>"); 111 sbPage.Append("</nav>"); 112 #endregion 113 } 114 break; 115 } 116 117 118 return MvcHtmlString.Create(sbPage.ToString()); 119 } 120 #endregion 121 } 122 }
b.View测试调用
1 @using PagerExtend 2 @model IEnumerable<XinSheng.Api.Controllers.MoAirticle> 3 4 <table> 5 Url:@ViewBag.Url 6 7 @foreach (var item in Model) 8 { 9 <tr> 10 <td>@item.Title</td> 11 <td>@item.Author</td> 12 <td>@item.CreateTime</td> 13 </tr> 14 } 15 </table> 16 17 @Html.PageExtend(ViewBag.PagerOption as HtmlHelperExtensions.MoPagerOption)
c.Controller测试
1 using PagerExtend; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Web.Mvc; 7 using System.Web.Security; 8 9 namespace XinSheng.Api.Controllers 10 { 11 12 [Serializable] 13 public class MoAirticle 14 { 15 16 public string Title { get; set; } 17 public string Author { get; set; } 18 public DateTime CreateTime { get; set; } 19 } 20 21 public class HomeController : Controller 22 { 23 24 public ActionResult Index(int id) 25 { 26 ViewBag.Title = "测试 分页"; 27 28 List<MoAirticle> moAirticles = new List<MoAirticle>(); 29 30 for (int i = 1; i < 50; i++) 31 { 32 33 moAirticles.Add(new MoAirticle 34 { 35 Author = "神牛步行" + i, 36 CreateTime = DateTime.Now, 37 Title = "博客园之" + i 38 }); 39 } 40 ViewBag.Url = Request.RawUrl; 41 42 //初始化分页基础信息 43 var option = new HtmlHelperExtensions.MoPagerOption 44 { 45 46 CurrentPage = id, 47 PageSize = 15, 48 Total = moAirticles.Count 49 }; 50 //动态传递分页属性 51 ViewBag.PagerOption = option; 52 53 var articles = moAirticles.Skip((option.CurrentPage - 1) * option.PageSize).Take(option.PageSize).ToList(); 54 return View(articles); 55 } 56 } 57 }
D.分页PagerExtend.dll下载地址
PagerExtend.rar
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- ASP.NET MVC Admin主页快速构建 2020-03-23
- Asp.Net MVC4通过id更新表单内容的思路详解 2020-03-19
- MVC数据验证详解 2020-03-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash