自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET MVC分頁控件的實(shí)現(xiàn)

開發(fā) 后端
本文介紹了ASP.NET MVC分頁控件的完成。

需求及模擬代碼

需求,假設(shè)我們有個(gè)列表,有分頁功能,我們可能需要一個(gè)頁碼列表,如

我們可能需要一個(gè)頁碼列表  

我們模擬寫一下Action:

  1. public ActionResult Index(int? p)  
  2. {  
  3.     if (!p.HasValue) p = 1;//如果未對p傳值就是第1頁  
  4.     var list = new List< int>();//生成一個(gè)模擬列表  
  5.     for (var i = 0; i <  10;i++ )  
  6.     {  
  7.         list.Add(p.Value);//是第幾頁就向中填充幾個(gè)這個(gè)頁碼的數(shù)  
  8.     }  
  9.     return View(list);//強(qiáng)型傳遞給View  

View中我寫以下顯示方式:

  1. < %@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage< List< int>>" %>  
  2.     
  3.  < asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">  
  4.      Pager for List  
  5.  < /asp:Content>  
  6.     
  7.  < asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">  
  8.      < div>  
  9.          < ul>  
  10.             < %foreach (int i in Model){//顯示這個(gè)列表%>  
  11.             < li>< %=i %>< /li>  
  12.             < %} %>  
  13.         < /ul>  
  14.     < /div>  
  15.     < !--將在這里顯示分頁的部分-->  
  16.    < /asp:Content> 

下面是運(yùn)行后的結(jié)果:

ASP.NET MVC分頁控件:***頁URL類似/Home/Index?p=1

***頁URL類似/Home/Index?p=1  

ASP.NET MVC分頁控件:第二頁URL類似/Home/Index?p=2

 第二頁URL類似/Home/Index?p=2

其它頁面以此類推

ASP.NET MVC分頁控件:最簡單的解決方案

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

  1. < %  
  2.              int p = 1;  
  3.              int.TryParse(Request.QueryString["p"], out p);  
  4.    %>  
  5.    < div>  
  6.    < %=Html.ActionLink("上一頁""Index"new { p= p-1})%>  
  7.    < strong>當(dāng)前頁:< %=p %>< /strong>  
  8.    < %=Html.ActionLink("下一頁""Index"new { p= p+1})%>  
  9.    < /div>  

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

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

當(dāng)然,也可以根據(jù)這個(gè)來寫1,2,3,4,5頁的鏈接,而不寫“上一頁”或“下一頁”

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

使用RouteLink來實(shí)現(xiàn)

我們使用Html.RouteLink就可以實(shí)現(xiàn)不與Action或Controller的名稱相耦合,例如:

  1. < %for (int i = 1; i <  10; i++)  
  2.     {  
  3.         ViewContext.RouteData.Values["p"] = i;//設(shè)置頁碼  
  4.         Writer.Write(  
  5.            Html.RouteLink(i.ToString(), ViewContext.RouteData.Values)  
  6.             );//顯示設(shè)置頁面后的鏈接  
  7.         Writer.Write(" ");//連接后顯示個(gè)空格,好看點(diǎn)  
  8.         
  9.     }%> 

這個(gè)列表,我們就可以顯示為

這個(gè)列表,我們就可以顯示為 

完善這個(gè)Pager并封裝成一個(gè)Helper

上面列出了Pager,但是有幾個(gè)問題

1.沒有上下頁

2.沒有指定當(dāng)前頁的特殊顯示

3.每次調(diào)用時(shí)都要寫一次

4.如果QueryString有其它參數(shù)時(shí)無法處理

那我們下面來完善這個(gè)Pager

并將之封裝成一個(gè)Helper 

  1. using System;  
  2.   using System.Collections.Generic;  
  3.   using System.Linq;  
  4.   using System.Web;  
  5.   using System.Web.Mvc;  
  6.   using System.Web.Routing;  
  7.   using System.Text;  
  8.   using System.Web.Mvc.Html;  
  9.     
  10.  namespace MvcApplication2.Helpers  
  11.  {  
  12.      public static class PagerExtensions  
  13.      {  
  14.          /**//// < summary>    
  15.          /// 分頁P(yáng)ager顯示    
  16.          /// < /summary>     
  17.          /// < param name="html">< /param>    
  18.          /// < param name="currentPageStr">標(biāo)識(shí)當(dāng)前頁碼的QueryStringKey< /param>     
  19.          /// < param name="pageSize">每頁顯示< /param>    
  20.          /// < param name="totalCount">總數(shù)據(jù)量< /param>    
  21.          /// < returns>< /returns>   
  22.          public static string Pager(this HtmlHelper html, string currentPageStr, int pageSize, int totalCount)  
  23.          {  
  24.             var queryString = html.ViewContext.HttpContext.Request.QueryString;  
  25.              int currentPage = 1; //當(dāng)前頁    
  26.              var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //總頁數(shù)    
  27.              var dict = new System.Web.Routing.RouteValueDictionary(html.ViewContext.RouteData.Values);  
  28.              var output = new System.Text.StringBuilder();  
  29.              if (!string.IsNullOrEmpty(queryString[currentPageStr]))  
  30.              {  
  31.                  //與相應(yīng)的QueryString綁定   
  32.                  foreach (string key in queryString.Keys)  
  33.                      if (queryString[key] != null && !string.IsNullOrEmpty(key))  
  34.                         dict[key] = queryString[key];  
  35.                  int.TryParse(queryString[currentPageStr], out currentPage);  
  36.              }  
  37.              else 
  38.              {  
  39.                  //獲取 ~/Page/{page number} 的頁號(hào)參數(shù)  
  40.                  int.TryParse(dict[currentPageStr].ToString(), out currentPage);  
  41.              }  
  42.              if (currentPage < = 0) currentPage = 1;  
  43.              if (totalPages > 1)  
  44.              {  
  45.                  if (currentPage != 1)  
  46.                  {  
  47.                      //處理首頁連接    
  48.                      dict[currentPageStr] = 1;  
  49.                      output.AppendFormat("{0} ", html.RouteLink("首頁", dict));  
  50.                  }  
  51.                  if (currentPage > 1)  
  52.                  {  
  53.                      //處理上一頁的連接    
  54.                      dict[currentPageStr] = currentPage - 1;  
  55.                      output.Append(html.RouteLink("上一頁", dict));  
  56.                 }  
  57.                  else 
  58.                  {  
  59.                      output.Append("上一頁");  
  60.                  }  
  61.                  output.Append(" ");  
  62.                  int currint = 5;  
  63.                  for (int i = 0; i < = 10; i++)  
  64.                  {  
  65.                      //一共最多顯示10個(gè)頁碼,前面5個(gè),后面5個(gè)    
  66.                      if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) < = totalPages)  
  67.                          if (currint == i)  
  68.                          {  
  69.                              //當(dāng)前頁處理    
  70.                              output.Append(string.Format("[{0}]", currentPage));  
  71.                          }  
  72.                          else 
  73.                          {  
  74.                              //一般頁處理   
  75.                              dict[currentPageStr] = currentPage + i - currint;  
  76.                              output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));  
  77.                          }  
  78.                      output.Append(" ");  
  79.                  }  
  80.                  if (currentPage <  totalPages)  
  81.                  {  
  82.                      //處理下一頁的鏈接   
  83.                      dict[currentPageStr] = currentPage + 1;  
  84.                      output.Append(html.RouteLink("下一頁", dict));  
  85.                  }  
  86.                  else 
  87.                  {  
  88.                      output.Append("下一頁");  
  89.                  }  
  90.                  output.Append(" ");  
  91.                  if (currentPage != totalPages)  
  92.                  {  
  93.                      dict[currentPageStr] = totalPages;  
  94.                      output.Append(html.RouteLink("末頁", dict));  
  95.                  }  
  96.                 output.Append(" ");  
  97.              }  
  98.              output.AppendFormat("{0} / {1}", currentPage, totalPages);//這個(gè)統(tǒng)計(jì)加不加都行   
  99.              return output.ToString();  
  100.         }  
  101.     } 

添加Controller代碼:

  1. public ActionResult Index(int? page)  
  2.         {  
  3.             if (page == null)  
  4.                 page = 1;  
  5.             return View();  
  6.         }  

aspx頁面調(diào)用:

  1. < %=Html.Pager("page", 10, 10020)%> 

效果

效果 

這回我們算是解決了這個(gè)問題,ASP.NET MVC分頁控件成功構(gòu)建。

【編輯推薦】

  1. 在DataBound事件處理中編碼確定數(shù)據(jù)的值
  2. 使用ASP.NET 2.0 FormView顯示數(shù)據(jù)
  3. ASP.NET DetailsView中格式化單元格
  4. 如何在DataBound事件中編碼確定數(shù)據(jù)的值
  5. DetailsView分頁顯示數(shù)據(jù)

責(zé)任編輯:book05 來源: cnblogs
相關(guān)推薦

2009-07-22 16:02:39

ASP.NET MVCPagedList

2009-09-10 09:50:47

ASP.NET MVC

2010-03-19 09:17:16

ASP.NET MVC

2009-07-20 15:44:32

ASP.NET MVC

2010-08-02 09:18:39

ASP.NET MVC

2009-09-09 09:09:17

ASP.NET MVC

2010-01-26 13:15:42

ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-06-01 10:23:31

asp.net mvcasp.net mvc.net mvc框架

2009-11-06 09:23:41

ASP.NET高效分頁

2009-07-29 09:04:36

JQRTEasp.net mvc

2012-04-23 15:10:18

ASP.NET

2009-07-27 13:52:36

Panel控件ASP.NET

2009-07-22 09:11:02

Action方法ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)