文章目錄
- 1、webform下的一個分頁輔助類
- 2、AspNetMvcPager靜態類
- 3、控制器裡查詢和傳參
- 4、頁面調用
我在前面的部落格裡曾經再次總結過一個webform下使用極廣的分頁輔助類。本文總結一下asp.net mvc下的簡單分頁工具類,對於需要從事mvc開發的朋友可以參考一下。這個分頁輔助類本質上就是直接使用webform下的分頁工具類,再配合HtmlHelper擴充方法稍加改進和封裝。所有分頁過程可以省卻很多代碼,而且在View(頁面)裡調用和webform的方式差不多,使用很方便。
1、webform下的一個分頁輔助類
關於webform下的分頁工具類的具體使用介紹,您可以參考這一篇。
使用的時候,需要初始化樣式,在web.config下可以添加配置:
<appSettings> <!--分頁樣式--> <add key="PagerStyle" value="PagerCss"/> </appSettings>
2、AspNetMvcPager靜態類
這個靜態類是對MVC下的HtmlHelper添加幾個產生分頁tag的擴充方法:
using System.Collections.Specialized;using System.Text;namespace System.Web.Mvc{ using DotNet.Common.WebForm; public static class AspNetMvcPager { public static string RenderPager(this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, System.Web.HttpRequest request) { string url = GenerateURL(request); AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url); string pagerStr = AspNetPagerControl.RenderPager(ctrl); return GeneratePagerString(pagerStr); } public static string RenderPager(this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, string baseString) { AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString); string pagerStr = AspNetPagerControl.RenderPager(ctrl); return GeneratePagerString(pagerStr); } public static string RenderStatisticPager(this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, System.Web.HttpRequest request) { string url = GenerateURL(request); AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url); string pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl); return GeneratePagerString(pagerStr); } public static string RenderStatisticPager(this HtmlHelper helper, int leftSize, int currentPage, int recordsPerPage, int totalCount, string baseString) { AspNetPagerControl ctrl = new AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString); string pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl); return GeneratePagerString(pagerStr); } private static string GenerateURL(System.Web.HttpRequest request) { StringBuilder url = new StringBuilder(); url.Append(request.Url.AbsolutePath); NameValueCollection collection = request.QueryString; string[] keys = collection.AllKeys; int counter = 0; for (int i = 0; i < keys.Length; i++) { if (keys[i].ToLower() == "pageindex") { continue; } url.AppendFormat("{0}{1}={2}", (counter == 0 ? "?" : "&"), keys[i], collection[keys[i]]); counter++; } return url.ToString(); } private static string GeneratePagerString(string pagerStr) { TagBuilder builder = new TagBuilder("div"); builder.IdAttributeDotReplacement = "_"; builder.GenerateId(System.Guid.NewGuid().ToString()); builder.InnerHtml = pagerStr; return builder.ToString(); } }}
3、控制器裡查詢和傳參
在控制器裡,view裡有時候是通過點擊查詢按鈕(POST方式)進行搜尋的,有時候是點擊分頁連結通過url傳參的(GET方式),所以控制查詢條件和正確分頁,都要在ctroller裡做好。本文的範例程式碼給的代碼相當簡單,分頁參數的擷取也非常直接,您可以自己分析一下。
4、頁面調用
和webform下類似,通過<%= %>直接綁定進行頁面呈現:
<%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%> <%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%> <%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, string.Format("{0}?firstname={1}&lastname={2}", HttpContext.Current.Request.Url.AbsolutePath,pager.FirstName,pager.LastName))%> <%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, string.Format("{0}?firstname={1}&lastname={2}", HttpContext.Current.Request.Url.AbsolutePath, pager.FirstName, pager.LastName))%>
總體來說,使用起來非常簡單,其中傳參和url的確定是重點。
需要說明的是,mvc和webform非常明顯不同的一個地方,就是mvc對url 進行了重寫,一不小心就可能造成404錯誤發生的慘劇,所以您在傳參的時候務必注意。
有圖有真相:
樣本下載:MvcApp