發布一個從webform改進而來的asp.net mvc分頁工具類

來源:互聯網
上載者:User
文章目錄
  • 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.