详解一个ASP.NET MVC分页效果

开发 后端
在这里我们将介绍的是一个ASP.NET MVC分页效果,希望本文能为大家更好的使用ASP.NET MVC框架有所帮助。

在这里我们将谈到的是ASP.NET MVC框架中的一个HTML辅助类,希望通过本文能对大家了解ASP.NET MVC分页有所帮助。

#T#

本人写的一个ASP.NET MVC分页Helper,支持普通分页(也就是,首页、上一页、下一页、末页等),综合分页(普通分页和数字分页的综合)。下面是ASP.NET MVC分页效果:

LIST分页

分页代码:

PagerHelper.cs

-->  1 using System;
  2 using System.Collections.Generic;
  3 using System.Collections.Specialized;
  4 using System.Linq;
  5 using System.Web;
  6 using System.Text;
  7 using System.Web.Mvc;
  8 using System.Web.Routing;
  9 using System.Data.Objects.DataClasses;
 10 namespace System.Web.Mvc
 11 {
 12     public static class PagerHelper
 13     {
 14         /// 


 15         /// 分页
 16         /// 
 17         /// 
 18         /// 分页id
 19         /// 当前页
 20         /// 分页尺寸
 21         /// 记录总数
 22         /// 分页头标签属性
 23         /// 分页样式
 24         /// 分页模式
 25         /// 
 26         public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, 

 
int pageSize, int recordCount, object htmlAttributes, string className,PageMode mode)
 27         {
 28             TagBuilder builder = new TagBuilder("table");
 29             builder.IdAttributeDotReplacement = "_";
 30             builder.GenerateId(id);
 31             builder.AddCssClass(className);
 32             builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
 33             builder.InnerHtml = GetNormalPage(currentPageIndex, pageSize, recordCount,mode);
 34             return builder.ToString();
 35         }
 36         /// 
 37         /// 分页
 38         /// 
 39         /// 
 40         /// 分页id
 41         /// 当前页
 42         /// 分页尺寸
 43         /// 记录总数
 44         /// 分页样式
 45         /// 
 46         public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount, string className)
 47         {
 48             return Pager(helper, id, currentPageIndex, pageSize, recordCount, null, className,PageMode.Normal);
 49         }
 50         /// 
 51         /// 分页
 52         /// 
 53         /// 
 54         /// 分页id
 55         /// 当前页
 56         /// 分页尺寸
 57         /// 记录总数
 58         /// 
 59         public static string Pager(this HtmlHelper helper,string id,int currentPageIndex,int pageSize,int recordCount)
 60         {
 61             return Pager(helper, id, currentPageIndex, pageSize, recordCount,null);
 62         }
 63         /// 
 64         /// 分页
 65         /// 
 66         /// 
 67         /// 分页id
 68         /// 当前页
 69         /// 分页尺寸
 70         /// 记录总数
 71         /// 分页模式
 72         /// 
 73         public static string Pager(this HtmlHelper helper, string id, int currentPageIndex, int pageSize, int recordCount,PageMode mode)
 74         {
 75             return Pager(helper, id, currentPageIndex, pageSize, recordCount, null,mode);
 76         }
 77         /// 
 78         /// 分页
 79         /// 
 80         /// 
 81         /// 分页id
 82         /// 当前页
 83         /// 分页尺寸
 84         /// 记录总数
 85         /// 分页样式
 86         /// 分页模式
 87         /// 
 88         public static string Pager(this HtmlHelper helper, string id, i
nt currentPageIndex, int pageSize, int recordCount,string className, PageMode mode)
 89         {
 90             return Pager(helper, id, currentPageIndex, pageSize, recordCount, null,className,mode);
 91         }
 92         /// 
 93         /// 获取普通分页
 94         /// 
 95         /// 
 96         /// 
 97         /// 
 98         /// 
 99         private static string GetNormalPage(int currentPageIndex, int pageSize, int recordCount,PageMode mode)
100         {
101             int pageCount = (recordCount%pageSize ==0?recordCount/pageSize:recordCount/pageSize+1);
102             StringBuilder url = new StringBuilder();
103             url.Append(HttpContext.Current.Request.Url.AbsolutePath+"?page={0}");
104             NameValueCollection collection = HttpContext.Current.Request.QueryString;
105             string[] keys = collection.AllKeys;
106             for (int i = 0; i < keys.Length; i++)
107             {
108                 if (keys[i].ToLower() != "page")
109                     url.AppendFormat("&{0}={1}", keys[i], collection[keys[i]]);
110             }
111             StringBuilder sb = new StringBuilder();
112             sb.Append("     ");
113             sb.AppendFormat("总共{0}条记录,共{1}页,当前第{2}页  ", recordCount, pageCount, currentPageIndex);
114             if (currentPageIndex == 1)
115                 sb.Append("首页 ");
116             else
117             {
118                 string url1 = string.Format(url.ToString(), 1);
119                 sb.AppendFormat("首页 ", url1);
120             }
121             if (currentPageIndex > 1)
122             {
123                 string url1 = string.Format(url.ToString(), currentPageIndex - 1);
124                 sb.AppendFormat("上一页 ", url1);
125             }
126             else
127                 sb.Append("上一页 ");
128             if(mode == PageMode.Numeric)
129                 sb.Append(GetNumericPage(currentPageIndex,pageSize,recordCount,pageCount,url.ToString()));
130             if (currentPageIndex < pageCount)
131             {
132                 string url1 = string.Format(url.ToString(), currentPageIndex+1);
133                 sb.AppendFormat("下一页 ", url1);
134             }
135             else
136                 sb.Append("下一页 ");
137 
138             if (currentPageIndex == pageCount)
139                 sb.Append("末页 ");
140             else
141             {
142                 string url1 = string.Format(url.ToString(), pageCount);
143                 sb.AppendFormat("末页 ", url1);
144             }
145             return sb.ToString();
146         }
147         /// 
148         /// 获取数字分页
149         /// 
150         /// 
151         /// 
152         /// 
153         /// 
154         /// 
155         /// 
156         private static string GetNumericPage(int currentPageIndex, int pageSize, int recordCount, int pageCount,string url)
157         {
158             int k = currentPageIndex / 10;
159             int m = currentPageIndex % 10;
160             StringBuilder sb = new StringBuilder();
161             if (currentPageIndex / 10 == pageCount / 10)
162             {
163                 if (m == 0)
164                 {
165                     k--;
166                     m = 10;
167                 }
168                 else
169                     m = pageCount%10;
170             }
171             else
172                 m = 10;
173             for (int i = k * 10 + 1; i <= k * 10 + m; i++)
174             {
175                 if (i == currentPageIndex)
176                     sb.AppendFormat("{0} ", i);
177                 else
178                 {
179                     string url1 = string.Format(url.ToString(), i);
180                     sb.AppendFormat("{1} ",url1, i);
181                 }
182             }
183             
184             return sb.ToString();
185         }
186     }
187     /// 
188     /// 分页模式
189     /// 
190     public enum PageMode
191     {
192         /// 
193         /// 普通分页模式
194         /// 
195         Normal,
196         /// 
197         /// 普通分页加数字分页
198         /// 
199         Numeric
200     }
201 }
202 
PagerQuery.cs包含两个属性,一个是PageInfo实体类属性Pager,包含RecordCount,CurrentPageIndex,PageSize三个属性。一个是Model EntityList属性。
代码
 
 
  1.  using System;  
  2.  using System.Collections.Generic;  
  3.  using System.Linq;  
  4.  using System.Web;  
  5.   namespace System.Web.Mvc  
  6.  {  
  7.      public class PagerQuery<TPager,TEntityList>  
  8.      {  
  9.         public PagerQuery(TPager pager, TEntityList entityList)  
  10.         {  
  11.             this.Pager = pager;  
  12.             this.EntityList = entityList;  
  13.         }  
  14.         public TPager Pager { getset; }  
  15.         public TEntityList EntityList { getset; }   
  16.     }  
PageInfo.cs

代码

  1.  using System;  
  2.   using System.Collections.Generic;  
  3.   using System.Linq;  
  4.   using System.Web;  
  5. namespace System.Web.Mvc  
  6.   {  
  7.       public class PagerInfo  
  8.       {  
  9.          public int RecordCount { getset; }  
  10.          public int CurrentPageIndex { getset; }  
  11.          public int PageSize { getset; }  
  12.     }  

使用示例:

代码

  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
  2. Inherits="System.Web.Mvc.ViewPage<PagerQuery<PagerInfo, IList<NewsArticleInfo>>>" %> 
  3.  
  4. <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
  5.     NewsList  
  6. </asp:Content> 
  7. <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
  8. <h2>NewsList</h2> 
  9.  <table> <tr> <th></th> 
  10.             <th>NoteID</th> 
  11.             <th>Title</th> 
  12.             <th>Author</th> 
  13.             <th>Hit</th> 
  14.             <th>ReplyNum</th> 
  15. </tr> 
  16. <% foreach (var item in Model.EntityList) { %> 
  17. <tr><td> 
  18. <%= Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) %> |  
  19. <%= Html.ActionLink("Details", "NewsDetail", new { noteID=item.NoteID })%> 
  20. </td><td> 
  21.                 <%= Html.Encode(item.NoteID) %> 
  22.             </td> 
  23. <td><%= Html.Encode(item.Title) %></td> 
  24. <td><%= Html.Encode(item.Author)%></td> 
  25. <td><%= Html.Encode(item.Hit)%></td> 
  26. <td><%= Html.Encode(item.ReplyNum)%></td> 
  27.  </tr> 
  28.  <% } %></table> 
  29. <p> 
  30. <%=Html.Pager("pager",Model.Pager.CurrentPageIndex,Model.Pager.PageSize,Model.Pager.RecordCount,PageMode.Numeric) %></p> 
  31.  
  32. </asp:Content> 

controler:

  1. [AcceptVerbs(HttpVerbs.Get)]  
  2. ublic ActionResult NewsList(int boardID,int? page)  
  3. {  
  4.     PagerInfo pager = new PagerInfo();  
  5.     NewsArticleInfo info = new NewsArticleInfo();  
  6.     info.NewsBoard = new NewsBoardInfo();  
  7.     info.NewsBoard.BoardID = boardID;  
  8.     pager.RecordCount = Resolve().GetArticleDataList(info, ArticleTypeEnum.Pass);  
  9.     pager.PageSize = 10;  
  10.    pager.CurrentPageIndex = (page!=null?(int)page:1);  
  11.    IList result = Resolve().GetArticleDataList(pager.CurrentPageIndex, pager.PageSize, ArticleTypeEnum.Pass, info);  
  12.    PagerQuery> query = new PagerQuery>(pager,result);  
  13.    return View(query);  

原文标题:一个MVC分页Helper

链接:http://www.cnblogs.com/JackFeng/archive/2010/01/25/JackFeng.html

责任编辑:彭凡 来源: 博客园
相关推荐

2010-03-19 09:17:16

ASP.NET MVC

2009-09-10 09:50:47

ASP.NET MVC

2009-09-11 09:18:17

ASP.NET MVC

2009-07-28 14:47:18

ASP.NET MVC

2009-07-22 16:02:39

ASP.NET MVCPagedList

2012-08-27 10:11:43

ASP.NET

2009-09-18 10:20:26

PRG数据验证

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-31 12:43:59

ASP.NET MVC

2009-04-23 09:42:39

FubuMVCASP.NET MVCMVC

2011-10-11 09:43:15

ASP.NET MVC

2010-10-12 09:52:02

ASP.NET MVC

2009-10-29 09:15:32

ASP.NET MVCDropDownLis

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-29 16:08:07

ASP和ASP.NET

2011-04-14 09:19:22

ASP.NET MVC
点赞
收藏

51CTO技术栈公众号