Cool MVC:一步一步打造完美分頁 (續)

來源:互聯網
上載者:User

上一篇 Cool MVC:一步一步打造完美分頁 , 部分朋友反映不知道怎麼用。我以為我已經寫的太詳細了,畢竟在blog上貼太多代碼不雅觀。 這次做了個完整的例子,並附上代碼供有需要的人下載,估計不會再有人問怎麼用了。

其實上一篇的代碼有兩小bug,

1. 一般分頁的url假如是這樣形式: /Home/Index/Page/1,第一頁可以不顯示頁號,也就是當不指定頁號時,url就是:/Home/Index。這時候如果按下一頁,原來的代碼就會報錯說找不到“page”關鍵字了。

2. 丟失查詢字元,如果url是:/Home/Index?Page=1&user=Bruce, 那麼按下一頁以後就會變成這樣:/Home/Index?Page=2, 丟失了後面的user=Bruce

這裡附上修正後的代碼:

    public static class PagerHelper    {        /// <summary>          /// 分頁Pager顯示          /// </summary>           /// <param name="html"></param>          /// <param name="currentPageStr">標識當前頁碼的QueryStringKey</param>           /// <param name="pageSize">每頁顯示</param>          /// <param name="totalCount">總資料量</param>          /// <returns></returns>         public static string Pager(this HtmlHelper html, string currentPageStr, int pageSize, int totalCount)        {            var queryString = html.ViewContext.HttpContext.Request.QueryString;            int currentPage = 1; //當前頁              var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //總頁數              var dict = new System.Web.Routing.RouteValueDictionary(html.ViewContext.RouteData.Values);            var output = new StringBuilder();            if (!string.IsNullOrEmpty(queryString[currentPageStr]))            {                //與相應的QueryString綁定                 foreach (string key in queryString.Keys)                    if (queryString[key] != null && !string.IsNullOrEmpty(key))                        dict[key] = queryString[key];                int.TryParse(queryString[currentPageStr], out currentPage);            }            else            {                //擷取 ~/Page/{page number} 的頁號參數                if (dict.ContainsKey(currentPageStr))                    int.TryParse(dict[currentPageStr].ToString(), out currentPage);            }            //保留查詢字元到下一頁            foreach (string key in queryString.Keys)                    dict[key] = queryString[key];            //如果有需要,保留表單值到下一頁 (我暫時不需要, 所以注釋掉)            //var formValue = html.ViewContext.HttpContext.Request.Form;            //foreach (string key in formValue.Keys)            //    if (formValue[key] != null && !string.IsNullOrEmpty(key))            //        dict[key] = formValue[key];             if (currentPage <= 0) currentPage = 1;            if (totalPages > 1)            {                if (currentPage != 1)                {                    //處理首頁串連                      dict[currentPageStr] = 1;                    output.AppendFormat("{0} ", html.RouteLink("首頁", dict));                }                if (currentPage > 1)                {                    //處理上一頁的串連                      dict[currentPageStr] = currentPage - 1;                    output.Append(html.RouteLink("上一頁", dict));                }                else                {                    output.Append("上一頁");                }                output.Append(" ");                int currint = 5;                for (int i = 0; i <= 10; i++)                {                    //一共最多顯示10個頁碼,前面5個,後面5個                      if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)                        if (currint == i)                        {                            //當前頁處理                              output.Append(string.Format("[{0}]", currentPage));                        }                        else                        {                            //一般頁處理                             dict[currentPageStr] = currentPage + i - currint;                            output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));                        }                    output.Append(" ");                }                if (currentPage < totalPages)                {                    //處理下一頁的連結                     dict[currentPageStr] = currentPage + 1;                    output.Append(html.RouteLink("下一頁", dict));                }                else                {                    output.Append("下一頁");                }                output.Append(" ");                if (currentPage != totalPages)                {                    dict[currentPageStr] = totalPages;                    output.Append(html.RouteLink("末頁", dict));                }                output.Append(" ");            }            output.AppendFormat("{0} / {1}", currentPage, totalPages);//這個統計加不加都行             return output.ToString();        }    }
 
 
最後附上一個完整的使用例子:MvcPaging.rar

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.