最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 22:35:43
文档

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

MVC HtmlHelper扩展类(PagingHelper)实现分页功能:MVC HtmlHelper扩展类PagingHelper实现分页功能,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.T
推荐度:
导读MVC HtmlHelper扩展类(PagingHelper)实现分页功能:MVC HtmlHelper扩展类PagingHelper实现分页功能,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.T

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  {0}   Records Page  {1} of  {2}   ", TotalCount, CurrentPage, TotalPages);
 #endregion
 #region 首页 上一页
 sb.AppendFormat(TagBuilder(values, 1, " First"));
 //sb.AppendFormat("<a href={0}?page=1{1}>First</a> ",url,urlParameter);
 if (HasPreviousPage)
 {
 sb.AppendFormat(TagBuilder(values, CurrentPage - 1, " Prev "));
 //sb.AppendFormat("<a href={0}?page={1}{2}>Prev</a> ", 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("... ");
 }
 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(" " + TagBuilder(values, i, i.ToString()) + " ");
 }
 }
 #endregion
 #region 下一页 末页
 if (HasNextPage)
 {
 sb.AppendFormat(TagBuilder(values, CurrentPage + 1, "Next"));
 //sb.AppendFormat("<a href={0}?page={1}{2}>Next</a> ", 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 + "   ";
 }
 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>

最终效果图:

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

MVC HtmlHelper扩展类(PagingHelper)实现分页功能:MVC HtmlHelper扩展类PagingHelper实现分页功能,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.T
推荐度:
标签: page mvc 分页类
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top