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>
最终效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# 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
相关文章:
如何高效利用200m空间完成建站?
如何获取PHP WAP自助建站系统源码?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何选择最佳自助建站系统?快速指南解析优劣
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何通过远程VPS快速搭建个人网站?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
电商网站制作公司有哪些,1688网是什么意思?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
如何选购建站域名与空间?自助平台全解析
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
制作网站外包平台,自动化接单网站有哪些?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何用花生壳三步快速搭建专属网站?
如何在搬瓦工VPS快速搭建网站?
C++中引用和指针有什么区别?(代码说明)
宝塔面板创建网站无法访问?如何快速排查修复?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
建站之星如何助力网站排名飙升?揭秘高效技巧
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
如何在建站之星网店版论坛获取技术支持?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何通过.red域名打造高辨识度品牌网站?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何批量查询域名的建站时间记录?
公司网站设计制作厂家,怎么创建自己的一个网站?
如何通过万网虚拟主机快速搭建网站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何用美橙互联一键搭建多站合一网站?
建站之星代理商如何保障技术支持与售后服务?
,想在网上投简历,哪几个网站比较好?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何快速搭建自助建站会员专属系统?
,交易猫的商品怎么发布到网站上去?
建站之星展会模板:智能建站与自助搭建高效解决方案
建站之星3.0如何解决常见操作问题?
广东企业建站网站优化与SEO营销核心策略指南
常州企业网站制作公司,全国继续教育网怎么登录?
香港服务器租用每月最低只需15元?
如何正确下载安装西数主机建站助手?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何通过可视化优化提升建站效果?
*请认真填写需求信息,我们会在24小时内与您取得联系。