成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET MVC分頁控件的實現

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

需求及模擬代碼

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

我們可能需要一個頁碼列表  

我們模擬寫一下Action:

  1. public ActionResult Index(int? p)  
  2. {  
  3.     if (!p.HasValue) p = 1;//如果未對p傳值就是第1頁  
  4.     var list = new List< int>();//生成一個模擬列表  
  5.     for (var i = 0; i <  10;i++ )  
  6.     {  
  7.         list.Add(p.Value);//是第幾頁就向中填充幾個這個頁碼的數  
  8.     }  
  9.     return View(list);//強型傳遞給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){//顯示這個列表%>  
  11.             < li>< %=i %>< /li>  
  12.             < %} %>  
  13.         < /ul>  
  14.     < /div>  
  15.     < !--將在這里顯示分頁的部分-->  
  16.    < /asp:Content> 

下面是運行后的結果:

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分頁控件:最簡單的解決方案

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

  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>當前頁:< %=p %>< /strong>  
  8.    < %=Html.ActionLink("下一頁""Index"new { p= p+1})%>  
  9.    < /div>  

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

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

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

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

使用RouteLink來實現

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

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

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

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

完善這個Pager并封裝成一個Helper

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

1.沒有上下頁

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

3.每次調用時都要寫一次

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

那我們下面來完善這個Pager

并將之封裝成一個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.          /// 分頁Pager顯示    
  16.          /// < /summary>     
  17.          /// < param name="html">< /param>    
  18.          /// < param name="currentPageStr">標識當前頁碼的QueryStringKey< /param>     
  19.          /// < param name="pageSize">每頁顯示< /param>    
  20.          /// < param name="totalCount">總數據量< /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; //當前頁    
  26.              var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //總頁數    
  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.                  //與相應的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} 的頁號參數  
  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個頁碼,前面5個,后面5個    
  66.                      if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) < = totalPages)  
  67.                          if (currint == i)  
  68.                          {  
  69.                              //當前頁處理    
  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);//這個統計加不加都行   
  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頁面調用:

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

效果

效果 

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

【編輯推薦】

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

責任編輯:book05 來源: cnblogs
相關推薦

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

2009-09-09 09:09:17

ASP.NET MVC

2010-08-02 09:18:39

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-11-06 09:23:41

ASP.NET高效分頁

2009-07-31 12:43:59

ASP.NET MVC

2009-07-27 13:52:36

Panel控件ASP.NET

2012-04-23 15:10:18

ASP.NET

2010-01-26 13:15:42

ASP.NET MVC

2009-06-01 10:23:31

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

2009-07-29 09:04:36

JQRTEasp.net mvc

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-08-04 14:23:36

ASP.NET查詢分頁

2009-07-22 09:11:02

Action方法ASP.NET MVC

2009-07-24 15:35:00

ASP.NET Gri

2009-07-20 10:53:59

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久在线视频播放免费视频 | 丁香久久 | 99色播 | 日韩成人在线播放 | 男人天堂网av | 欧美在线一区二区三区 | 日本韩国欧美在线观看 | 国产精品久久久久久久免费观看 | 欧美激情精品久久久久久 | 伊人最新网址 | 亚洲欧美日韩在线一区二区 | 国产片侵犯亲女视频播放 | 天堂亚洲网 | 国内自拍视频在线观看 | 色吧久久 | 中文字幕精品视频在线观看 | 欧美在线a | 日本精品视频 | 国产成人av在线 | 亚洲第一av网站 | 日韩久久中文字幕 | 欧美三级三级三级爽爽爽 | 欧美激情综合 | 国产精品一码二码三码在线 | 中文字幕 国产精品 | 国产二区三区 | 亚洲91视频 | 欧美精品乱码久久久久久按摩 | 在线欧美视频 | 91综合网| 在线亚洲欧美 | 中文字幕91 | 亚洲国产在 | 午夜一区二区三区视频 | 国产精品久久久久一区二区三区 | 亚洲一区二区三区四区五区午夜 | 亚洲综合久久精品 | 日本亚洲一区 | 亚洲综合在线视频 | 久久国内精品 | 日韩中文视频 |