MVC HtmlHelper扩展类(PagingHelper)实现分页功能
 更新时间:2017年05月06日 14:59:14   作者:长毛象  

这篇文章主要为大家详细介绍了MVC HtmlHelper扩展,实现分页功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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>

最终效果图:

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

您可能感兴趣的文章:ASP.NET MVC4 HtmlHelper扩展类,实现分页功能ASP.NET MVC HtmlHelper如何扩展ASP.NET MVC中HtmlHelper控件7个大类中各个控件使用详解Java简单实现SpringMVC+MyBatis分页插件ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc)MVC+jQuery.Ajax异步实现增删改查和分页MVC分页之MvcPager使用详解超好用轻量级MVC分页控件JPager.NetASP.NET MVC分页和排序功能实现

MVC
PagingHelper
分页

相关文章
ASP.NET技巧:数据岛出到Excel最为简易的方法ASP.NET技巧:数据岛出到Excel最为简易的方法… 2006-09-09
VS2010、VS2008等项目的默认浏览器修改方法(图文)默认情况下,VS会使用操作系统的默认浏览器,但我在调试 ASP.NET 程序时更偏向于使用IE浏览器,下面与大家分享下VS2010、VS2008等项目的默认浏览器的修改方法 2013-05-05
ASP.NET DropDownListCheckBox使用示例(解决回发问题)本文为大家介绍下ASP.NET DropDownListCheckBox的使用,这个是根据LigerUI改的,解决了回发问题,喜欢的朋友可以参考下 2013-11-11
ASP.NET Web页生命周期和执行的方法介绍这是前几天去一家公司时,其中当时的一个笔试题! 我去,看了当时我就晕菜了,所以,就记录下来,以备以后查看,方便需要的朋友 2012-10-10
.NetCore之接口缓存的实现示例这篇文章主要介绍了.NetCore之接口缓存的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-09-09
.NET Core/Framework如何创建委托大幅度提高反射调用的性能详解反射是一种很重要的技术,下面这篇文章主要给大家介绍了关于.NET Core/Framework如何创建委托大幅度提高反射调用性能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下 2018-09-09
asp.net 结合mysql存储过程进行分页代码最近用mysql + asp.net来写网站,既然mysql已经支持存储过程了,那么像分页这么常用的东西,当然要用存储过程啦 2008-11-11
浅谈ASP.NET的Postback 实例代码说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角度,撇开Web Page 的生命周期浅谈Postback。 2009-08-08
asp.net MVC 在Controller控制器中实现验证码输出功能这篇文章主要介绍了asp.net MVC 在Controller控制器中实现验证码输出功能,本文给大家介绍非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 2019-12-12
垃圾代码二三行 ASPX小马垃圾代码二三行 ASPX小马… 2007-12-12

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。