最近项目中用到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 分页相关推荐

  1. 基于Bootstrap的Asp.net Mvc 分页的实现(转)

    最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这 边是模拟了一 ...

  2. asp.net MVC分页

    .Net MVC  分页代码,分页的关键就是在于这几个参数pageIndex ,recordCount,pageSize ,下面是张林的网站做的一个简单的分页代码 效果如图 public class ...

  3. ASP.NET MVC 4使用PagedList.Mvc分页

    ASP.NET MVC中进行分页的方式有多种,在NuGet上有提供使用PagedList.PagedList.Mvc进行分页. 1. 通过NuGet引用PagedList.Mvc 在安装引用Paged ...

  4. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  5. 自己手写一个Spring MVC框架

    想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架.本文带领大家简化的手写一个Spring MVC框架. Spring框架对于Java后端程序 ...

  6. JS 自写datapage.js 通用分页

    JS 自写datapage.js 通用分页 var Page = function () { }; Page.prototype = { Loading: "<img src='/Co ...

  7. 一起谈.NET技术,一个MVC分页Helper

    本人写的一个分页Helper,支持普通分页(也就是,首页.上一页.下一页.末页等),综合分页(普通分页和数字分页的综合).下面是分页效果: 分页代码: PagerHelper.cs 代码   1 us ...

  8. ASP.NET MVC分页实现

    ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...

  9. 【MVC】MVC分页

    相关文章: [Servlet]CRUD–查找 1 建表,准备数据 2 准备实体类 Actor.java package bean; public class Actor {private int id ...

最新文章

  1. 小米豪派大红包!向几千名员工发放股权激励,人均39万,应届生都有!小米员工却吵翻天:不公平,作秀!...
  2. 一文读懂 Spring的前世今生
  3. java多线程之消费者生产者模式
  4. 直播 | AAAI 2021:文本对抗攻防中的对抗训练方法
  5. JS中关于能不能加分号
  6. [导入]需要关注的十大安全技巧之:免受垃圾邮件侵扰
  7. 面向对象编程(三)——程序执行过程中内存分析
  8. 将 cordova-simulate 依赖项安装到扩展时出错(解决方案)
  9. 使用Yomail的时候出现的错误解决方案
  10. 个人QQ号码推广代码
  11. Python Level 4 程序题:布置任务
  12. 复旦计算机课程谁的好,复旦大学计算机研究生导师有哪些
  13. 从尾到头打印链表(C++和Python 实现)
  14. L0范数、L1范数和L2范数的区别
  15. HTML设置页面动画效果有几种,前端制作动画的几种方式(css3,js)
  16. 向量化执行引擎是怎么玩的?
  17. 数字时代,互联网企业的组织形态
  18. win10默认浏览器中找不到谷歌浏览器最快速的解决办法
  19. 远程视频监控:框架概述
  20. IDEA 内存不足问题

热门文章

  1. 腾讯云携手朋迈推出“综合能源服务平台” 实现能源资源“智慧化”运营
  2. CRM User Status profile中Business Transaction字段的用途 1
  3. .NET 自定义Json序列化时间格式
  4. 转帖:HttpStatusCode状态说明C#版
  5. 图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践
  6. HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
  7. Maven3.x 插件开发入门
  8. MySQL登陆时加-U选项
  9. ORACLE安装参数修改
  10. OGEngine开源引擎环境搭建