侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

MVC默认路由实现分页(PagerExtend.dll下载)

php  /  管理员 发布于 8年前   197

这两天在群里有人咨询有没有现成的.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 ? 1 : 0);   if (totalPage <= 0) { return MvcHtmlString.Create("分页异常"); }   //当前路由地址   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 ? 1 : option.CurrentPage - 1);      for (int i = 1; i <= totalPage; i++)      {       sbPage.AppendFormat("  <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 ? option.CurrentPage : option.CurrentPage + 1);      sbPage.Append("    <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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    MVC4制作网站教程第一篇 绪论
    下一条:
    MVC分页之MvcPager使用详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客