MVC HtmlHelper擴(kuò)展類(PagingHelper)實(shí)現(xiàn)分頁(yè)功能
MVC HtmlHelper擴(kuò)展類PagingHelper實(shí)現(xiàn)分頁(yè)功能,供大家參考,具體內(nèi)容如下
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> /// 分頁(yè)類如果一個(gè)頁(yè)面顯示兩個(gè)列表只需要復(fù)制該類到項(xiàng)目中重命名一個(gè)就可以 /// </summary> public static class PagingHelper { #region 屬性Property /// <summary> /// 當(dāng)前頁(yè)碼 /// </summary> private static int? _currentPage = null; /// <summary> /// 當(dāng)前頁(yè)碼 /// </summary> public static int CurrentPage { get { return _currentPage ?? 1; } set { _currentPage = value; } } /// <summary> /// 每頁(yè)記錄條數(shù) /// </summary> private static int? _pageSize = null; /// <summary> /// 每頁(yè)記錄條數(shù) /// </summary> public static int PageSize { get { return _pageSize ?? 15; } set { _pageSize = value; } } /// <summary> /// 是否顯示上一頁(yè) /// </summary> public static bool HasPreviousPage { get { return (CurrentPage > 1); } } /// <summary> /// 是否顯示下一頁(yè) /// </summary> public static bool HasNextPage { get { return (CurrentPage < TotalPages); } } /// <summary> /// 當(dāng)前頁(yè): /// </summary> public static string CurrentPageDisplayName { get; set; } /// <summary> /// 每頁(yè)顯示: /// </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> /// 總條數(shù) /// </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> /// 設(shè)置分頁(yè)url eg:/Admin/Product/Index /// </summary> public static string PagingUrl { get; set; } /// <summary> /// 默認(rèn)page,設(shè)置分頁(yè)參數(shù)名 eg:/Admin/Product/Index?PagingParamName=1 /// </summary> public static string PagingParamName { get; set; } #endregion #region Paging String /// <summary> /// MVC分頁(yè) 如果用jquery分頁(yè)只需要class不需要href,用以下實(shí)現(xiàn): /// $(".class值").live("click", function () { /// var page = $(this).attr("pagingParamName值"); /// $("#order").html("").load("/Customer/Order?page="+page); /// });live自動(dòng)給遍歷增加事件 /// </summary> /// <param name="html"></param> /// <param name="htmlAttributes">new {@class="grey",pagingParamName="page",href="/Admin/Product/Index" rel="external nofollow" } pagingParamName默認(rèn)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 分頁(yè)最外層div/span TagBuilder builder = new TagBuilder("div");//span //創(chuàng)建Id,注意要先設(shè)置IdAttributeDotReplacement屬性后再執(zhí)行GenerateId方法. //builder.IdAttributeDotReplacement = "_"; //builder.GenerateId(id); //builder.AddCssClass(""); //builder.MergeAttributes(values); builder.InnerHtml = PagingBuilder(values); #endregion return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));//解決直接顯示html標(biāo)記 } private static string PagingBuilder(RouteValueDictionary values) { #region 條件搜索時(shí)包括其他參數(shù) 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 分頁(yè)統(tǒng)計(jì) sb.AppendFormat("Total {0} Records Page {1} of {2} ", TotalCount, CurrentPage, TotalPages); #endregion #region 首頁(yè) 上一頁(yè) 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 分頁(yè)邏輯 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 下一頁(yè) 末頁(yè) 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 } }
后臺(tái)Controller代碼
// // GET: /Home/ public ActionResult Index(int? page) { page = page ?? 1; PagingHelper.CurrentPage = Convert.ToInt32(page); PagingHelper.PageSize = 20; //{獲取數(shù)據(jù)集的中條數(shù),以及分頁(yè)的數(shù)據(jù)集} PagingHelper.TotalCount = 2000; return View(); }
前臺(tái)頁(yè)面代碼
@{ 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>
最終效果圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
asp.net core多文件分塊同時(shí)上傳組件使用詳解
這篇文章主要為大家介紹了一個(gè)可多個(gè)文件同時(shí)上傳、斷點(diǎn)續(xù)傳,并實(shí)時(shí)反饋上傳進(jìn)度的 Asp.Net core 組件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12TreeView創(chuàng)建IHierarchicalDataSource類型的數(shù)據(jù)源實(shí)現(xiàn)
為TreeView創(chuàng)建IHierarchicalDataSource類型的數(shù)據(jù)源實(shí)現(xiàn)2009-01-01從別人那拷下來(lái)的幾點(diǎn)Session使用的經(jīng)驗(yàn)
從別人那拷下來(lái)的幾點(diǎn)Session使用的經(jīng)驗(yàn)...2007-04-04C#后臺(tái)調(diào)用前臺(tái)javascript的五種方法小結(jié)
于項(xiàng)目需要,用到其他項(xiàng)目組用VC開(kāi)發(fā)的組件,在web后臺(tái)代碼無(wú)法訪問(wèn)這個(gè)組件,所以只好通過(guò)后臺(tái)調(diào)用前臺(tái)的javascript,從而操作這個(gè)組件。2010-12-12C#/.NET讀取或修改文件的創(chuàng)建時(shí)間及修改時(shí)間詳解
這篇文章主要給大家介紹了關(guān)于C#/.NET讀取或修改文件的創(chuàng)建時(shí)間及修改時(shí)間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08.NET?Core使用Autofac容器的DI依賴注入,IOC控制反轉(zhuǎn)及AOP切面編程
本文詳細(xì)講解了.NET?Core使用Autofac容器的DI依賴注入,IOC控制反轉(zhuǎn)及AOP切面編程,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02asp.net+ajax+sqlserver自動(dòng)補(bǔ)全功能實(shí)現(xiàn)解析
這篇文章主要介紹了asp.net + ajax + sqlserver 自動(dòng)補(bǔ)全功能,需要的朋友可以參考下2014-03-03c#后臺(tái)修改前臺(tái)DOM的css屬性示例代碼
本文為大家詳細(xì)介紹下如何使用c#修改前臺(tái)DOM的css屬性,具體示例如下,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07