ASP.NET MVC Pager分頁

3.2最簡單的解決方案

我想最簡單無非就是直接寫鏈接,當然也要考慮更換Routing規則的問題,所以我們可以最簡單如下來寫:

   <%

              int p = 1;

              int.TryParse(Request.QueryString["p"], out p);

    %>

 <div>

   <%=Html.ActionLink("上一頁", "Index", new { p= p-1})%>

  <strong>當前頁:<%=p %></strong>

  <%=Html.ActionLink("下一頁", "Index", new { p= p+1})%>

 </div>


這樣就可以得到如果下的分頁樣式

當然,也可以根據這個來寫1,2,3,4,5頁的鏈接,而不寫“上一頁”或“下一頁”

但是這種方法有個問題,就是使用Html.ActionLink的時候要用字符串來指定Action和Controller。下面我們來改換另一種方法來實現

3.3使用RouteLink來實現

我們使用Html.RouteLink就可以實現不與Action或Controller的名稱相耦合,例如:

    <%for (int i = 1; i < 10; i++)

        {

            ViewContext.RouteData.Values["p"] = i;//設置頁碼

           Writer.Write(

               Html.RouteLink(i.ToString(), ViewContext.RouteData.Values)

               );//顯示設置頁面後的鏈接

            Writer.Write(" ");//連接後顯示個空格,好看點

         

       }%>


這個列表,我們就可以顯示爲

3.4完善這個Pager並封裝成一個Helper

上面列出了Pager,但是有幾個問題

·         沒有上下頁

·         沒有指定當前頁的特殊顯示

·         每次調用時都要寫一次

·         如果QueryString有其它參數時無法處理

那我們下面來完善這個Pager

並將之封裝成一個Helper

 

   /// <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; //當前頁

           int.TryParse(queryString[currentPageStr], out currentPage); //與相應的QueryString綁定

            var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //總頁數

            var dict = new RouteValueDictionary(html.ViewContext.RouteData.Values);

    

            var output = new StringBuilder();

    

            foreach (string key in queryString.Keys)

                if (queryString[key] != null && !string.IsNullOrEmpty(key))

                    dict[key] = queryString[key];

            if (totalPages > 1)

            {

                if (currentPage != 1)

                {//處理首頁連接

                    dict["p"] = 1;

                    output.AppendFormat("{0} ",html.RouteLink("首頁", dict));

                }

                if (currentPage > 1)

                {//處理上一頁的連接

                    dict["p"] = 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["p"] = currentPage + i - currint;

                            output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));

                        }

                    output.Append(" ");

                }

                if (currentPage < totalPages)

               {//處理下一頁的鏈接

                    dict["p"] = currentPage + 1;

                    output.Append(html.RouteLink("下一頁", dict));

                }

                else

                {

                    output.Append("下一頁");

                }

                output.Append(" ");

                if (currentPage != totalPages)

                {

                    dict["p"] = totalPages;

                    output.Append(html.RouteLink("末頁", dict));

                }

                output.Append(" ");

            }

            output.AppendFormat("{0} / {1}", currentPage, totalPages);//這個統計加不加都行

            return output.ToString();

        }


效果

 

發佈了8 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章