php htmlhelper,通过HtmlHelper中PagingHelper类实现分页方法介绍

这篇文章主要为大家详细介绍了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

{

///

/// 分页类如果一个页面显示两个列表只需要复制该类到项目中重命名一个就可以

///

public static class PagingHelper

{

#region 属性Property

///

/// 当前页码

///

private static int? _currentPage = null;

///

/// 当前页码

///

public static int CurrentPage

{

get

{

return _currentPage ?? 1;

}

set

{

_currentPage = value;

}

}

///

/// 每页记录条数

///

private static int? _pageSize = null;

///

/// 每页记录条数

///

public static int PageSize

{

get

{

return _pageSize ?? 15;

}

set

{

_pageSize = value;

}

}

///

/// 是否显示上一页

///

public static bool HasPreviousPage

{

get

{

return (CurrentPage > 1);

}

}

///

/// 是否显示下一页

///

public static bool HasNextPage

{

get

{

return (CurrentPage < TotalPages);

}

}

///

/// 当前页:

///

public static string CurrentPageDisplayName { get; set; }

///

/// 每页显示:

///

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; }

///

/// 总条数

///

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);

}

}

///

/// 设置分页url eg:/Admin/Product/Index

///

public static string PagingUrl

{

get;

set;

}

///

/// 默认page,设置分页参数名 eg:/Admin/Product/Index?PagingParamName=1

///

public static string PagingParamName

{

get;

set;

}

#endregion

#region Paging String

///

/// MVC分页 如果用jquery分页只需要class不需要href,用以下实现:

/// $(".class值").live("click", function () {

/// var page = $(this).attr("pagingParamName值");

/// $("#order").html("").load("/Customer/Order?page="+page);

/// });live自动给遍历增加事件

///

///

/// new {@class="grey",pagingParamName="page",href="/Admin/Product/Index" rel="external nofollow" } pagingParamName默认page,匿名类添加控件属性

///

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 分页最外层p/span

TagBuilder builder = new TagBuilder("p");//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("First ",url,urlParameter);

if (HasPreviousPage)

{

sb.AppendFormat(TagBuilder(values, CurrentPage - 1, " Prev "));

//sb.AppendFormat("Prev ", 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()) + "&nbsp");

}

}

#endregion

#region 下一页 末页

if (HasNextPage)

{

sb.AppendFormat(TagBuilder(values, CurrentPage + 1, "Next"));

//sb.AppendFormat("Next ", url, CurrentPage + 1, urlParameter);

}

sb.AppendFormat(TagBuilder(values, TotalPages, "Last"));

//sb.AppendFormat("Last",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;

Index


#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;

}

$(function () {

$(".pagination .active").live("click", function () {

$("#page").val($(this).attr("page"));

$("#form_Submit").submit();

});

});

@Html.Paging(new { @class = "active" })

最终效果图:

09a784cae23dd1e1aa855d826595b4aa.png

【相关推荐】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值