艾伟_转载:一个MVC分页Helper

简介:   本人写的一个分页Helper,支持普通分页(也就是,首页、上一页、下一页、末页等),综合分页(普通分页和数字分页的综合)。下面是分页效果:分页代码:PagerHelper.cs代码  1 using System;  2  using System.

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

分页代码:

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,  int  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 
 6  namespace  System.Web.Mvc
 7  {
 8       public   class  PagerQuery < TPager,TEntityList >
 9      {
10           public  PagerQuery(TPager pager, TEntityList entityList)
11          {
12               this .Pager  =  pager;
13               this .EntityList  =  entityList;
14          }
15           public  TPager Pager {  get set ; }
16           public  TEntityList EntityList {  get set ; } 
17      }
18  }

PageInfo.cs

代码
 1  using  System;
 2  using  System.Collections.Generic;
 3  using  System.Linq;
 4  using  System.Web;
 5 
 6  namespace  System.Web.Mvc
 7  {
 8       public   class  PagerInfo
 9      {
10           public   int  RecordCount {  get set ; }
11 
12           public   int  CurrentPageIndex {  get set ; }
13 
14           public   int  PageSize {  get set ; }
15      }
16  }

使用示例:

代码
<% @ Page Title = ""  Language = " C# "  MasterPageFile = " ~/Views/Shared/Site.Master "  Inherits = " System.Web.Mvc.ViewPage>> "   %>

< asp:Content ID = " Content1 "  ContentPlaceHolderID = " TitleContent "  runat = " server " >
    NewsList
asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    
<h2>NewsList h2>

    
<table>
        
<tr>
            
<th> th>
            
<th>
                NoteID
            
th>
            
<th>
                Title
            
th>
            
<th>
                Author
            
th>
            
<th>
                Hit
            
th>
            
<th>
                ReplyNum
            
th>
            
        
tr>

    
<% foreach (var item in Model.EntityList) { %>
    
        
<tr>
            
<td>
                
<%= Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) %> |
                
<%= Html.ActionLink("Details", "NewsDetail", new { noteID=item.NoteID })%>
            
td>
            
<td>
                
<%= Html.Encode(item.NoteID) %>
            
td>
            
<td>
                
<%= Html.Encode(item.Title) %>
            
td>
            
<td>
                
<%= Html.Encode(item.Author)%>
            
td>
            
<td>
                
<%= Html.Encode(item.Hit)%>
            
td>
            
<td>
                
<%= Html.Encode(item.ReplyNum)%>
            
td>
            
        
tr>
    
    
<% } %>

    
table>

    
<p>
        
<%=Html.Pager("pager",Model.Pager.CurrentPageIndex,Model.Pager.PageSize,Model.Pager.RecordCount,PageMode.Numeric) %>
    
p>

asp:Content>

 controler:

代码
 1          [AcceptVerbs(HttpVerbs.Get)]
 2           public  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 < INewsBLL > ().GetArticleDataList(info, ArticleTypeEnum.Pass);
 9              pager.PageSize  =   10 ;
10              pager.CurrentPageIndex  =  (page != null ? ( int )page: 1 );
11              IList < NewsArticleInfo >  result  =  Resolve < INewsBLL > ().GetArticleDataList(pager.CurrentPageIndex, pager.PageSize, ArticleTypeEnum.Pass, info);
12              PagerQuery < PagerInfo, IList < NewsArticleInfo >>  query  =   new  PagerQuery < PagerInfo, IList < NewsArticleInfo >> (pager,result);
13               return  View(query);
14          }

 

目录
相关文章
|
大数据 数据库 C++
【菜鸟看框架】——MVC+EF实现分页
【菜鸟看框架】——MVC+EF实现分页
95 0
【菜鸟看框架】——MVC+EF实现分页
|
Web App开发 SQL 前端开发
EF 之 MVC 排序,查询,分页 Sorting, Filtering, and Paging For MVC About EF
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。    十年河东十年河西,莫欺少年穷    学无止境,精益求精    上篇博客我们学习了EF CodeFirst增删改查之‘CRUD’,今儿,我们来探讨下MVC下的EF 排序、查询、分页操作    在此,本人先从分页说起    话说,做过webForm项目的程序员用AspNetPage.
1421 0
|
前端开发 JavaScript .NET
|
JavaScript 前端开发 .NET