MVC HtmlHelper扩展类(PagingHelper)实现分页功能

发布时间 - 2026-01-11 01:00:26    点击率:

MVC HtmlHelper扩展类PagingHelper实现分页功能,供大家参考,具体内容如下

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace HtmlHelperMvc.Models
{
 /// <summary>
 /// 分页类如果一个页面显示两个列表只需要复制该类到项目中重命名一个就可以
 /// </summary>
 public static class PagingHelper
 {
  #region 属性Property
  /// <summary>
  /// 当前页码
  /// </summary>
  private static int? _currentPage = null;
  /// <summary>
  /// 当前页码
  /// </summary>
  public static int CurrentPage
  {
   get
   {
    return _currentPage ?? 1;
   }
   set
   {
    _currentPage = value;
   }
  }
  /// <summary>
  /// 每页记录条数
  /// </summary>
  private static int? _pageSize = null;
  /// <summary>
  /// 每页记录条数
  /// </summary>
  public static int PageSize
  {
   get
   {
    return _pageSize ?? 15;
   }
   set
   {
    _pageSize = value;
   }
  }
  /// <summary>
  /// 是否显示上一页
  /// </summary>
  public static bool HasPreviousPage
  {
   get
   {
    return (CurrentPage > 1);
   }
  }
  /// <summary>
  /// 是否显示下一页
  /// </summary>
  public static bool HasNextPage
  {
   get
   {
    return (CurrentPage < TotalPages);
   }
  }
  /// <summary>
  /// 当前页:
  /// </summary>
  public static string CurrentPageDisplayName { get; set; }
  /// <summary>
  /// 每页显示:
  /// </summary>
  public static string PageSizeDisplayName { get; set; }
  public static string FirstDisplayName { get; set; }
  public static string PreDisplayName { get; set; }
  public static string NextDisplayName { get; set; }
  public static string LastDisplayName { get; set; }
  public static string TotalCountDisplayName { get; set; }
  public static string TotalPagesDisplayName { get; set; }
  /// <summary>
  /// 总条数
  /// </summary>
  public static int TotalCount
  {
   get;
   set;
  }
  public static int TotalPages
  {
   get
   {
    return (int)Math.Ceiling(TotalCount / (double)PageSize);
    //return (TotalCount % PageSize == 0 ? TotalCount / PageSize : TotalCount / PageSize + 1);
   }
  }
  /// <summary>
  /// 设置分页url eg:/Admin/Product/Index
  /// </summary>
  public static string PagingUrl
  {
   get;
   set;
  }
  /// <summary>
  /// 默认page,设置分页参数名 eg:/Admin/Product/Index?PagingParamName=1
  /// </summary>
  public static string PagingParamName
  {
   get;
   set;
  }
  #endregion
  #region Paging String
  /// <summary>
  /// MVC分页 如果用jquery分页只需要class不需要href,用以下实现:
  /// $(".class值").live("click", function () {
  /// var page = $(this).attr("pagingParamName值");
  /// $("#order").html("").load("/Customer/Order?page="+page);
  /// });live自动给遍历增加事件
  /// </summary>
  /// <param name="html"></param>
  /// <param name="htmlAttributes">new {@class="grey",pagingParamName="page",href="/Admin/Product/Index" rel="external nofollow" } pagingParamName默认page,匿名类添加控件属性</param>
  /// <returns></returns>
  public static MvcHtmlString Paging(this System.Web.Mvc.HtmlHelper html, object htmlAttributes)
  {
   RouteValueDictionary values = new RouteValueDictionary(htmlAttributes);
   #region 属性赋值
   if (values["href"] != null)
   {
    PagingUrl = values["href"].ToString();
   }
   if (values["pagingParamName"] != null)
   {
    PagingParamName = values["pagingParamName"].ToString();
    values.Remove("pagingParamName");
   }
   else
   {
    PagingParamName = "page";
   }
   #endregion
   #region 分页最外层div/span
   TagBuilder builder = new TagBuilder("div");//span
   //创建Id,注意要先设置IdAttributeDotReplacement属性后再执行GenerateId方法. 
   //builder.IdAttributeDotReplacement = "_";
   //builder.GenerateId(id);
   //builder.AddCssClass("");
   //builder.MergeAttributes(values);
   builder.InnerHtml = PagingBuilder(values);
   #endregion
   return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));//解决直接显示html标记
  }
  private static string PagingBuilder(RouteValueDictionary values)
  {
   #region 条件搜索时包括其他参数
   StringBuilder urlParameter = new StringBuilder();
   NameValueCollection collection = HttpContext.Current.Request.QueryString;
   string[] keys = collection.AllKeys;
   for (int i = 0; i < keys.Length; i++)
   {
    if (keys[i].ToLower() != "page")
    {
     urlParameter.AppendFormat("&{0}={1}", keys[i], collection[keys[i]]);
    }
   }
   #endregion
   //CurrentPage = Convert.ToInt32(HttpContext.Current.Request.QueryString["page"] ?? "0");
   StringBuilder sb = new StringBuilder();
   #region 分页统计
   sb.AppendFormat("Total &nbsp;{0} &nbsp; Records Page &nbsp;{1} of &nbsp;{2} &nbsp; ", TotalCount, CurrentPage, TotalPages);
   #endregion
   #region 首页 上一页
   sb.AppendFormat(TagBuilder(values, 1, " First"));
   //sb.AppendFormat("<a href={0}?page=1{1}>First</a>&nbsp;",url,urlParameter);
   if (HasPreviousPage)
   {
    sb.AppendFormat(TagBuilder(values, CurrentPage - 1, " Prev "));
    //sb.AppendFormat("<a href={0}?page={1}{2}>Prev</a>&nbsp;", url, CurrentPage - 1, urlParameter);
   }
   #endregion
   #region 分页逻辑
   if (TotalPages > 10)
   {
    if ((CurrentPage + 5) < TotalPages)
    {
     if (CurrentPage > 5)
     {
      for (int i = CurrentPage - 5; i <= CurrentPage + 5; i++)
      {
       sb.Append(TagBuilder(values, i, i.ToString()));
      }
     }
     else
     {
      for (int i = 1; i <= 10; i++)
      {
       sb.Append(TagBuilder(values, i, i.ToString()));
      }
     }
     sb.Append("...&nbsp;");
    }
    else
    {
     for (int i = CurrentPage - 10; i <= TotalPages; i++)
     {
      sb.Append(TagBuilder(values, i, i.ToString()));
     }
    }
   }
   else
   {
    for (int i = 1; i <= TotalPages; i++)
    {
     sb.Append("&nbsp;" + TagBuilder(values, i, i.ToString()) + "&nbsp");
    }
   }
   #endregion
   #region 下一页 末页
   if (HasNextPage)
   {
    sb.AppendFormat(TagBuilder(values, CurrentPage + 1, "Next"));
    //sb.AppendFormat("<a href={0}?page={1}{2}>Next</a>&nbsp;", url, CurrentPage + 1, urlParameter);
   }
   sb.AppendFormat(TagBuilder(values, TotalPages, "Last"));
   //sb.AppendFormat("<a href={0}?page={1}{2}>Last</a>",url,TotalPages,urlParameter);
   #endregion
   return sb.ToString();
  }
  private static string TagBuilder(RouteValueDictionary values, int i, string innerText)
  {
   values[PagingParamName] = i;
   TagBuilder tag = new TagBuilder("a");
   if (PagingUrl != null)
   {
    values["href"] = PagingUrl + "?" + PagingParamName + "= " + i + "&nbsp;&nbsp;&nbsp;";
   }
   if (CurrentPage == i && innerText != " First" && innerText != " Last")
   {
    values["id"] = "on";
   }
   else
   {
    tag.Attributes["id"] = "";
   }
   tag.MergeAttributes(values);
   tag.SetInnerText(innerText);
   return tag.ToString();
  }
  #endregion
 }
}

后台Controller代码

//
// GET: /Home/

public ActionResult Index(int? page)
{
 page = page ?? 1;
 PagingHelper.CurrentPage = Convert.ToInt32(page);
 PagingHelper.PageSize = 20;

 //{获取数据集的中条数,以及分页的数据集}

 PagingHelper.TotalCount = 2000;
 return View();
}

前台页面代码

@{
 ViewBag.Title = "Index";
}
@using HtmlHelperMvc.Models;
<h2>Index</h2>
<hr />
<style type="text/css">
 #on
 {
  color: #FFF;
  background-color: #337AB7;
  border-color: #337AB7;
 }

 .pagination a
 {
  margin-right: 3px;
  padding: 5px 10px;
  font-size: 12px;
  text-decoration: none;
  background-color: #fff;
  border: 1px solid #ddd;
  cursor: pointer;
  display: inline-block;
  border-radius: 3px;
 }

 a
 {
  color: #337ab7;
  text-decoration: none;
 }

 a
 {
  background-color: transparent;
 }

 *
 {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
 }
</style>
<script src="~/Scripts/jquery-1.8.2.js"></script>
<script type="text/javascript">
 $(function () {
  $(".pagination .active").live("click", function () {
   $("#page").val($(this).attr("page"));
   $("#form_Submit").submit();
  });
 });
</script>
<form id="form_Submit" action="/Home/Index" method="post">
 <div class="fix">
  <div class="page">
   <div class="pagination pagination-sm pull-right" id="pageDiv" style="margin: 0px 0;">
    <input type="hidden" id="page" name="page" value="@PagingHelper.CurrentPage" />
    @Html.Paging(new { @class = "active" })
   </div>
  </div>
 </div>
</form>

最终效果图:

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


# MVC  # HtmlHelper  # PagingHelper  # 分页  # 一步一步封装自己的HtmlHelper组件BootstrapHelper(三)  # 一步一步封装自己的HtmlHelper组件BootstrapHelper(二)  # C# 封装HtmlHelper组件:BootstrapHelper  # ASP.NET MVC HtmlHelper如何扩展  # ASP.NET MVC4 HtmlHelper扩展类  # 实现分页功能  # ASP.NET MVC中HtmlHelper控件7个大类中各个控件使用详解  # asp.net 图片验证码的HtmlHelper  # ASP.NET MVC扩展HtmlHelper方法  # 每页  # 条数  # 下一页  # 上一页  # 只需要  # 不需要  # 遍历  # 要先  # 首页  # 末页  # 具体内容  # 大家多多  # 就可以  # 重命名  # 最外层  # 当前页  # Ceiling  # href  # function 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用wdcp快速搭建高效网站?  如何在阿里云服务器自主搭建网站?  linux写shell需要注意的问题(必看)  如何在万网开始建站?分步指南解析  北京网站制作的公司有哪些,北京白云观官方网站?  Python3.6正式版新特性预览  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  如何快速打造个性化非模板自助建站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  香港网站服务器数量如何影响SEO优化效果?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Bootstrap CSS布局之列表  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  如何快速搭建安全的FTP站点?  Laravel Fortify是什么,和Jetstream有什么关系  Laravel怎么使用artisan命令缓存配置和视图  如何在阿里云高效完成企业建站全流程?  iOS验证手机号的正则表达式  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  手机软键盘弹出时影响布局的解决方法  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  再谈Python中的字符串与字符编码(推荐)  微信小程序 wx.uploadFile无法上传解决办法  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Android中AutoCompleteTextView自动提示  Laravel如何为API生成Swagger或OpenAPI文档  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  bing浏览器学术搜索入口_bing学术文献检索地址  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  微信公众帐号开发教程之图文消息全攻略  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  深圳网站制作培训,深圳哪些招聘网站比较好?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  如何快速生成橙子建站落地页链接?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何在七牛云存储上搭建网站并设置自定义域名?