使用HtmlHelper 写自己的 mvc 分页
最近项目中用到MVC3,很多分页,本人习惯自己自己去实现一些代码,看了很多控件,总感觉代码有点多,还要去应用他们的DLL。甚是繁琐。所以就自己实现一下。
定义分页信息类
/// <summary>/// 分页信息/// </summary>public class PagingInfo{/// <summary>/// 显示连续页码数量/// </summary>public int ShowNum { get; set; }/// <summary>/// 记录总数/// </summary>public int TotalItems { get; set; }/// <summary>/// 每页记录数/// </summary>public int ItemsPerPage { get; set; }/// <summary>/// 当前页/// </summary>public int CurrentPage { get; set; }/// <summary>/// 是否显示第一页和最后一页/// </summary>private bool _IsShowFirstLast = true;public bool IsShowFirstLast { get { return _IsShowFirstLast; } set { _IsShowFirstLast = value; } }public int TotalPages{get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }}}
View Code
分页扩展
/// <summary>/// 根据pageInfo 生成一个分页控件/// </summary>/// <param name="html"></param>/// <param name="pageInfo"></param>/// <param name="pageUrl"></param>/// <returns></returns>public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pageInfo, Func<int, string> pageUrl){StringBuilder result = new StringBuilder(1000);bool isEven = (pageInfo.ShowNum & 1).Equals(0);int middleCeilingNum = (int)Math.Ceiling((decimal)pageInfo.ShowNum / 2);int middleFloorNum = (int)Math.Floor((decimal)pageInfo.ShowNum / 2);middleFloorNum = middleFloorNum == 0 ? 1 : middleFloorNum;int beginIndex = 1;//控件开始页数int endIndex = 1;//控件结束页数if (pageInfo.ShowNum >= pageInfo.TotalPages){beginIndex = 1;endIndex = pageInfo.TotalPages;}else{if (!isEven){beginIndex = pageInfo.CurrentPage <= middleCeilingNum? 1: pageInfo.CurrentPage - middleFloorNum;endIndex = pageInfo.CurrentPage <= middleCeilingNum? pageInfo.ShowNum: pageInfo.CurrentPage + middleFloorNum;beginIndex = pageInfo.CurrentPage + middleCeilingNum > pageInfo.TotalPages? pageInfo.TotalPages - pageInfo.ShowNum + 1: beginIndex;endIndex = pageInfo.CurrentPage + middleCeilingNum > pageInfo.TotalPages? pageInfo.TotalPages: endIndex;}else{beginIndex = pageInfo.CurrentPage <= middleCeilingNum ? 1 : pageInfo.CurrentPage - middleFloorNum + 1;endIndex = pageInfo.CurrentPage <= middleCeilingNum ? pageInfo.ShowNum : pageInfo.CurrentPage + middleFloorNum;beginIndex = pageInfo.CurrentPage + middleCeilingNum > pageInfo.TotalPages? pageInfo.TotalPages - pageInfo.ShowNum + 1: beginIndex;endIndex = pageInfo.CurrentPage + middleCeilingNum > pageInfo.TotalPages? pageInfo.TotalPages: endIndex;}}beginIndex = pageInfo.CurrentPage == pageInfo.ShowNum - middleFloorNum + 1? beginIndex - 1 : beginIndex;beginIndex = pageInfo.CurrentPage == pageInfo.TotalPages + pageInfo.ShowNum - middleFloorNum? beginIndex + 1 : beginIndex;endIndex = pageInfo.CurrentPage == pageInfo.TotalPages - middleFloorNum - 1? endIndex + 1 : endIndex;if (pageInfo.TotalPages <= pageInfo.ShowNum + 2){result.Append(GetMiddle(pageInfo, beginIndex, endIndex, pageUrl));}else{//前一页if (pageInfo.CurrentPage != 1)result.Append(GetUrl(pageInfo, pageUrl, pageInfo.CurrentPage - 1, "上一页").ToString());//第一页if (pageInfo.CurrentPage > middleCeilingNum + 1 && pageInfo.IsShowFirstLast)result.Append(GetUrl(pageInfo, pageUrl, 1, "1").ToString());if (pageInfo.CurrentPage > middleCeilingNum && pageInfo.CurrentPage != pageInfo.ShowNum - middleFloorNum + 1)result.Append(GetSplitStr().ToString());result.Append(GetMiddle(pageInfo, beginIndex, endIndex, pageUrl));if (pageInfo.CurrentPage < pageInfo.TotalPages - middleFloorNum && pageInfo.CurrentPage != pageInfo.TotalPages - middleFloorNum - 1)result.Append(GetSplitStr().ToString());//最后一页if (pageInfo.CurrentPage < pageInfo.TotalPages - (middleFloorNum + 1) && pageInfo.IsShowFirstLast)result.Append(GetUrl(pageInfo, pageUrl, pageInfo.TotalPages, pageInfo.TotalPages + "").ToString());//下一页if (pageInfo.TotalPages != 1 && (pageInfo.CurrentPage != pageInfo.TotalPages))result.Append(GetUrl(pageInfo, pageUrl, pageInfo.CurrentPage + 1, "下一页").ToString());}return MvcHtmlString.Create(result.ToString());}/// <summary>/// 特殊页面(第一页,前一页,后一页,最后一页)的连接生成/// </summary>/// <param name="pageInfo"></param>/// <param name="pageUrl"></param>/// <param name="i"></param>/// <param name="ShowTag">显示文字</param>/// <returns></returns>private static TagBuilder GetUrl(PagingInfo pageInfo, Func<int, string> pageUrl, int i, string ShowTag){TagBuilder tag = new TagBuilder("a");tag.MergeAttribute("href", pageUrl(i));tag.InnerHtml = ShowTag;return tag;}private static TagBuilder GetSplitStr(){TagBuilder tag = new TagBuilder("span");tag.MergeAttribute("class", "psplit");tag.InnerHtml = "...";return tag;}/// <summary>/// /// </summary>/// <returns></returns>private static string GetMiddle(PagingInfo pageInfo, int beginIndex, int endIndex, Func<int, string> pageUrl){StringBuilder result = new StringBuilder(300);for (int i = beginIndex; i <= endIndex; i++){TagBuilder tag = new TagBuilder("a");tag.MergeAttribute("href", pageUrl(i));tag.InnerHtml = i.ToString();if (i == pageInfo.CurrentPage)tag.AddCssClass("selected");result.Append(tag.ToString());}return result.ToStr();}
View Code
定义一个model
public class PhotoAlbumReply : IReply{public string Id { get; set; }public string Content { get; set; }}
View Code
定义一个viewmodel
public class PhotoAlbumReplyViewModel{public IEnumerable<PhotoAlbumReply> PhotoAlbumReplys { get; set; }public PagingInfo PagingInfo { get; set; }}
View Code
写自己的controller
public ActionResult List(int page){int pageSize = 20;int count = 100;//这个自己去实现IEnumerable<PhotoAlbumReply> PhotoAlbumReplys = null;//这个自己去实现return View(new PhotoAlbumReplyViewModel(){PhotoAlbumReplys = PhotoAlbumReplys,PagingInfo = new PagingInfo(){IsShowFirstLast = true,ShowNum = 4,CurrentPage = page,ItemsPerPage = pageSize,TotalItems = count}});}
View Code
view 调用
@{ViewBag.Title = "List"; } <style type="text/css">.pager a {padding: 10px;}.pager .selected {padding: 10px;color: red;} </style> @model ViewModel.PhotoAlbumReplyViewModel@if (null != Model.PhotoAlbumReplys && Model.PhotoAlbumReplys.Count() > 0){ <table border="1"><tr><td>ID</td><td>content</td></tr>foreach (var item in Model.PhotoAlbumReplys){<tr><td>@item.Id</td><td>@item.TargetId</td><td>@item.Content</td> </tr>} </table> } <div class="pager"> @Html.PageLinks(Model.PagingInfo, x => Url.Action("List", "Photo", new {page=x})) </div>
View Code
打完收工。
转载于:https://www.cnblogs.com/elent/p/3514857.html
使用HtmlHelper 写自己的 mvc 分页相关推荐
- 基于Bootstrap的Asp.net Mvc 分页的实现(转)
最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这 边是模拟了一 ...
- asp.net MVC分页
.Net MVC 分页代码,分页的关键就是在于这几个参数pageIndex ,recordCount,pageSize ,下面是张林的网站做的一个简单的分页代码 效果如图 public class ...
- ASP.NET MVC 4使用PagedList.Mvc分页
ASP.NET MVC中进行分页的方式有多种,在NuGet上有提供使用PagedList.PagedList.Mvc进行分页. 1. 通过NuGet引用PagedList.Mvc 在安装引用Paged ...
- 从 0 开始手写一个 Spring MVC 框架,向高手进阶
转载自 从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...
- 自己手写一个Spring MVC框架
想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...
- JS 自写datapage.js 通用分页
JS 自写datapage.js 通用分页 var Page = function () { }; Page.prototype = { Loading: "<img src='/Co ...
- 一起谈.NET技术,一个MVC分页Helper
本人写的一个分页Helper,支持普通分页(也就是,首页.上一页.下一页.末页等),综合分页(普通分页和数字分页的综合).下面是分页效果: 分页代码: PagerHelper.cs 代码 1 us ...
- ASP.NET MVC分页实现
ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...
- 【MVC】MVC分页
相关文章: [Servlet]CRUD–查找 1 建表,准备数据 2 准备实体类 Actor.java package bean; public class Actor {private int id ...
最新文章
- 小米豪派大红包!向几千名员工发放股权激励,人均39万,应届生都有!小米员工却吵翻天:不公平,作秀!...
- 一文读懂 Spring的前世今生
- java多线程之消费者生产者模式
- 直播 | AAAI 2021:文本对抗攻防中的对抗训练方法
- JS中关于能不能加分号
- [导入]需要关注的十大安全技巧之:免受垃圾邮件侵扰
- 面向对象编程(三)——程序执行过程中内存分析
- 将 cordova-simulate 依赖项安装到扩展时出错(解决方案)
- 使用Yomail的时候出现的错误解决方案
- 个人QQ号码推广代码
- Python Level 4 程序题:布置任务
- 复旦计算机课程谁的好,复旦大学计算机研究生导师有哪些
- 从尾到头打印链表(C++和Python 实现)
- L0范数、L1范数和L2范数的区别
- HTML设置页面动画效果有几种,前端制作动画的几种方式(css3,js)
- 向量化执行引擎是怎么玩的?
- 数字时代,互联网企业的组织形态
- win10默认浏览器中找不到谷歌浏览器最快速的解决办法
- 远程视频监控:框架概述
- IDEA 内存不足问题
热门文章
- 腾讯云携手朋迈推出“综合能源服务平台” 实现能源资源“智慧化”运营
- CRM User Status profile中Business Transaction字段的用途 1
- .NET 自定义Json序列化时间格式
- 转帖:HttpStatusCode状态说明C#版
- 图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践
- HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
- Maven3.x 插件开发入门
- MySQL登陆时加-U选项
- ORACLE安装参数修改
- OGEngine开源引擎环境搭建