ASP.NET MVC4 HtmlHelper擴(kuò)展類,實(shí)現(xiàn)分頁(yè)功能
1、擴(kuò)展HtmlHelper類方法ShowPageNavigate
public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount) { var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath; pageSize = pageSize == 0 ? 3 : pageSize; var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //總頁(yè)數(shù) var output = new StringBuilder(); if (totalPages > 1) { output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首頁(yè)</a> ", redirectTo, pageSize); if (currentPage > 1) {//處理上一頁(yè)的連接 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一頁(yè)</a> ", redirectTo, currentPage - 1, pageSize); } output.Append(" "); int currint = 5; for (int i = 0; i <= 10; i++) {//一共最多顯示10個(gè)頁(yè)碼,前面5個(gè),后面5個(gè) if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages) { if (currint == i) {//當(dāng)前頁(yè)處理 output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage); } else {//一般頁(yè)處理 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint); } } output.Append(" "); } if (currentPage < totalPages) {//處理下一頁(yè)的鏈接 output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一頁(yè)</a> ", redirectTo, currentPage + 1, pageSize); } output.Append(" "); if (currentPage != totalPages) { output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末頁(yè)</a> ", redirectTo, totalPages, pageSize); } output.Append(" "); } output.AppendFormat("<label>第{0}頁(yè) / 共{1}頁(yè)</label>", currentPage, totalPages);//這個(gè)統(tǒng)計(jì)加不加都行 return new HtmlString(output.ToString()); }
2、添加公共類PagerInfo,PageQuery
public class PagerInfo { public int RecordCount { get; set; } public int CurrentPageIndex { get; set; } public int PageSize { get; set; } } public class PagerQuery<TPager, TEntityList> { public PagerQuery(TPager pager, TEntityList entityList) { this.Pager = pager; this.EntityList = entityList; } public TPager Pager { get; set; } public TEntityList EntityList { get; set; } }
3、然后在Controller里面添加Action
public ActionResult Index(int? pageSize, int? pageIndex) { int pageIndex1 = pageIndex ?? 1; int pageSize1 = pageSize ?? 5; int count = 0; //從數(shù)據(jù)庫(kù)在取得數(shù)據(jù),并返回總記錄數(shù) var temp = newsSer.LoadPageEntities(c => true, c => c.id, false, pageSize1, pageIndex1, out count); PagerInfo pager = new PagerInfo(); pager.CurrentPageIndex = pageIndex1; pager.PageSize = pageSize1; pager.RecordCount = count; PagerQuery<PagerInfo, IQueryable<news>> query = new PagerQuery<PagerInfo, IQueryable<news>>(pager, temp); return View(query); }
4、View里的部分代碼
<tbody> @foreach (var item in Model.EntityList) { <tr> <td class="checkBox"> <input name="ids[]" type="checkbox" value="" /> </td> <td> @item.author </td> <td> @item.title </td> <td> @item.ctime </td> <td> @Html.ActionLink("編輯", "Edit", new { id = item.id }) | @Html.ActionLink("刪除", "Delete", new { id = item.id }) </td> </tr> } @*分頁(yè)*@ <tr class=""> <td colspan="5" align="center" class="paginator"> <span> @Html.ShowPageNavigate(Model.Pager.CurrentPageIndex, Model.Pager.PageSize, Model.Pager.RecordCount) </span> </td> </tr> </tbody>
5、添加一些樣式
.paginator { font: 12px Arial, Helvetica, sans-serif; padding: 10px 20px 10px 0; margin: 0px auto; } .paginator a { border: solid 1px #ccc; color: #0063dc; cursor: pointer; text-decoration: none; } .paginator a:visited { padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none; } .paginator .cpb { border: 1px solid #F50; font-weight: 700; color: #F50; background-color: #ffeee5; } .paginator a:hover { border: solid 1px #F50; color: #f60; text-decoration: none; } .paginator a, .paginator a:visited, .paginator .cpb, .paginator a:hover { float: left; height: 16px; line-height: 16px; min-width: 10px; _width: 10px; margin-right: 5px; text-align: center; white-space: nowrap; font-size: 12px; font-family: Arial,SimSun; padding: 0 3px; } .paginator label { display:block; float:left; }
6.總結(jié)
這個(gè)案例簡(jiǎn)單實(shí)現(xiàn)了在MVC中快速分頁(yè),其實(shí)很多開(kāi)源的項(xiàng)目中都有相關(guān)的HtmlHepler的擴(kuò)展函數(shù),其中也不乏帶有分頁(yè)的擴(kuò)展,例如著名的開(kāi)源商城項(xiàng)目nopCommerce,其中有就一個(gè)HtmlExtensions.cs擴(kuò)展類,里面就有關(guān)于分頁(yè)的擴(kuò)展,人家寫(xiě)的可是相當(dāng)專業(yè)哦,有興趣的可以研究一下。
- ASP.NET MVC 5使用X.PagedList.Mvc進(jìn)行分頁(yè)教程(PagedList.Mvc)
- MVC+jQuery.Ajax異步實(shí)現(xiàn)增刪改查和分頁(yè)
- MVC分頁(yè)之MvcPager使用詳解
- ASP.NET MVC分頁(yè)的實(shí)現(xiàn)方法
- ASP.NET MVC分頁(yè)和排序功能實(shí)現(xiàn)
- ASP.NET MVC5 實(shí)現(xiàn)分頁(yè)查詢的示例代碼
- Asp.net MVC 中利用jquery datatables 實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示功能
- ASP.NET MVC4 Razor模板簡(jiǎn)易分頁(yè)效果
- ASP.NET MVC+EF在服務(wù)端分頁(yè)使用jqGrid以及jquery Datatables的注意事項(xiàng)
- MVC使用MvcPager實(shí)現(xiàn)分頁(yè)效果
相關(guān)文章
Asp.net后臺(tái)把腳本樣式輸出到head標(biāo)簽中節(jié)省代碼冗余
最近在學(xué)習(xí)開(kāi)發(fā)服務(wù)器控件,其它就少不了為控件注冊(cè)js和css之類的資源文件,或者直接注冊(cè)純腳本樣式。其中就遇到如下問(wèn)題 1、 注冊(cè)的資源文件或純腳本樣式在生成的頁(yè)面中都不在head標(biāo)簽中(當(dāng)然這個(gè)不影響頁(yè)面功能) 2、 一個(gè)頁(yè)面使用多個(gè)一樣的控件時(shí),會(huì)出現(xiàn)重復(fù)輸入(出現(xiàn)多余代碼)2013-02-02ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁(yè)
這篇文章主要介紹了ASP.NET MVC使用RazorEngine解析模板生成靜態(tài)頁(yè)的相關(guān)資料,需要的朋友可以參考下2016-05-05異步 HttpContext.Current實(shí)現(xiàn)取值的方法(解決異步Application,Session,Cache.
在一個(gè)項(xiàng)目中,為了系統(tǒng)執(zhí)行效率更快,把一個(gè)經(jīng)常用到的數(shù)據(jù)庫(kù)表通過(guò)dataset放到Application中,發(fā)現(xiàn)在異步實(shí)現(xiàn)中每一次都會(huì)出現(xiàn)HttpContext.Current為null的異常,后來(lái)在網(wǎng)上查了好多資料,發(fā)現(xiàn)問(wèn)這個(gè)問(wèn)題的人多,回答的少2009-07-07ASP.net WebAPI跨域調(diào)用問(wèn)題的解決方法
在做Web開(kāi)發(fā)中,常常會(huì)遇到跨域的問(wèn)題,到目前為止,已經(jīng)有非常多的跨域解決方案。下面這篇文章主要給大家介紹了關(guān)于ASP.net WebAPI跨域調(diào)用問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2018-03-03ASP.NET Core實(shí)現(xiàn)中間件的幾種方式
這篇文章介紹了ASP.NET Core實(shí)現(xiàn)中間件的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08[譯]ASP.NET Core 2.0 網(wǎng)址重定向的方法
本篇文章主要介紹了[譯]ASP.NET Core 2.0 網(wǎng)址重定向的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10未能加載文件或程序集“AspNetPager”或它的某一個(gè)依賴項(xiàng)。拒絕訪問(wèn)
突然間,訪問(wèn)站點(diǎn)所有頁(yè)面都出錯(cuò),全提示:未能加載文件或程序集“AspNetPager”或它的某一個(gè)依賴項(xiàng)。拒絕訪問(wèn)2012-06-06