这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的。
A.效果(这里用了bootstrap的样式)
B.分析,知识点
a.分页通常由一下几个属性组成(当前页,总条数,分页记录数,路由地址),由此四项基本就能实现分页了,在加上一个控制样式的参数
b.各种数字的验证,计算总页数(如果总条数和分页记录数不能整除,那么最后相除的结果再+1)
c.下一页和上一下的按钮是零界点,需要判断是否是最后一页或者第一页来显示当前页数的继续增加或者减小
d.因为需要在cshtml文件中展示分页的效果,所以需要用到HtmlHelper扩展方法;扩展方法这里简单说下注意项:
.关键词this
.扩展方法对应的clas必须静态,该方法本身也是静态
.扩展方法对应的class后缀一般是Extensions修饰
e.试图页面@Html.PageExtend直接调用分页方法
C.代码展示
a.分页方法实现类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc; namespace PagerExtend { public static class HtmlHelperExtensions { #region 分页扩展 PageExtend /// <summary> /// 分页option属性 /// </summary> public class MoPagerOption { /// <summary> /// 当前页 必传 /// </summary> public int CurrentPage { get; set; } /// <summary> /// 总条数 必传 /// </summary> public int Total { get; set; } /// <summary> /// 分页记录数(每页条数 默认每页15条) /// </summary> public int PageSize { get; set; } /// <summary> /// 路由地址(格式如:/Controller/Action) 默认自动获取 /// </summary> public string RouteUrl { get; set; } /// <summary> /// 样式 默认 bootstrap样式 1 /// </summary> public int StyleNum { get; set; } } /// <summary> /// 分页扩展方法 /// </summary> /// <param name="helper">html试图</param> /// <param name="option">分页属性</param> /// <returns>html样式</returns> public static MvcHtmlString PageExtend(this HtmlHelper helper, MoPagerOption option) { if (option.PageSize <= 0) { option.PageSize = 15; } if (option.CurrentPage <= 0) { option.CurrentPage = 1; } if (option.Total <= 0) { return MvcHtmlString.Empty; } //总页数 var totalPage = option.Total / option.PageSize + (option.Total % option.PageSize > 0 "分页异常"); } //当前路由地址 if (string.IsNullOrEmpty(option.RouteUrl)) { option.RouteUrl = helper.ViewContext.HttpContext.Request.RawUrl; if (!string.IsNullOrEmpty(option.RouteUrl)) { var lastIndex = option.RouteUrl.LastIndexOf("/"); option.RouteUrl = option.RouteUrl.Substring(0, lastIndex); } } option.RouteUrl = option.RouteUrl.TrimEnd('/'); //构造分页样式 var sbPage = new StringBuilder(string.Empty); switch (option.StyleNum) { case 2: { break; } default: { #region 默认样式 sbPage.Append("<nav>"); sbPage.Append(" <ul class=\"pagination\">"); sbPage.AppendFormat(" <li><a href=\"{0}/{1}\" aria-label=\"Previous\"><span aria-hidden=\"true\">«</span></a></li>", option.RouteUrl, option.CurrentPage - 1 <= 0 " <li {1}><a href=\"{2}/{0}\">{0}</a></li>", i, i == option.CurrentPage "class=\"active\"" : "", option.RouteUrl); } sbPage.Append(" <li>"); sbPage.AppendFormat(" <a href=\"{0}/{1}\" aria-label=\"Next\">", option.RouteUrl, option.CurrentPage + 1 > totalPage " <span aria-hidden=\"true\">»</span>"); sbPage.Append(" </a>"); sbPage.Append(" </li>"); sbPage.Append(" </ul>"); sbPage.Append("</nav>"); #endregion } break; } return MvcHtmlString.Create(sbPage.ToString()); } #endregion } }
b.View测试调用
@using PagerExtend @model IEnumerable<XinSheng.Api.Controllers.MoAirticle> <table> Url:@ViewBag.Url @foreach (var item in Model) { <tr> <td>@item.Title</td> <td>@item.Author</td> <td>@item.CreateTime</td> </tr> } </table> @Html.PageExtend(ViewBag.PagerOption as HtmlHelperExtensions.MoPagerOption)
c.Controller测试
using PagerExtend; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Security; namespace XinSheng.Api.Controllers { [Serializable] public class MoAirticle { public string Title { get; set; } public string Author { get; set; } public DateTime CreateTime { get; set; } } public class HomeController : Controller { public ActionResult Index(int id) { ViewBag.Title = "测试 分页"; List<MoAirticle> moAirticles = new List<MoAirticle>(); for (int i = 1; i < 50; i++) { moAirticles.Add(new MoAirticle { Author = "神牛步行" + i, CreateTime = DateTime.Now, Title = "博客园之" + i }); } ViewBag.Url = Request.RawUrl; //初始化分页基础信息 var option = new HtmlHelperExtensions.MoPagerOption { CurrentPage = id, PageSize = 15, Total = moAirticles.Count }; //动态传递分页属性 ViewBag.PagerOption = option; var articles = moAirticles.Skip((option.CurrentPage - 1) * option.PageSize).Take(option.PageSize).ToList(); return View(articles); } } }
D.分页PagerExtend.dll下载地址:PagerExtend.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- [发烧人声]群星《邂逅》DTS-WAV
- 艻打绿《夏/狂热(苏打绿版)》[320K/MP3][106.42MB]
- 艻打绿《夏/狂热(苏打绿版)》[FLAC分轨][574.2MB]
- 黄雨勳《魔法列车首部曲》[320K/MP3][33.1MB]
- 李蕙敏.2014-记得·销魂新歌+精丫乐意唱片】【WAV+CUE】
- 谢金燕.1995-含泪跳恰蔷冠登】【WAV+CUE】
- 于文文.2024-天蝎座【华纳】【FLAC分轨】
- 黄雨勳《魔法列车首部曲》[FLAC/分轨][173.61MB]
- 群星《歌手2024 第13期》[320K/MP3][50.09MB]
- 群星《歌手2024 第13期》[FLAC/分轨][325.93MB]
- 阿木乃《爱情买卖》DTS-ES【NRG镜像】
- 江蕾《爱是这样甜》DTS-WAV
- VA-Hair(OriginalBroadwayCastRecording)(1968)(PBTHAL24-96FLAC)
- 博主分享《美末2RE》PS5 Pro运行画面 玩家仍不买账
- 《双城之战2》超多新歌MV发布:林肯公园再次献声