一起谈.NET技术,一个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          }

 

目录
相关文章
|
2天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
1天前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
1月前
|
人工智能 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
|
1月前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
|
1月前
|
数据可视化 NoSQL C#
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
C#/.NET/.NET Core技术前沿周刊 | 第 8 期(2024年10.01-10.06)
|
1月前
|
设计模式 开发框架 C#
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)
|
2月前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
56 1
|
2月前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
137 12
|
2月前
|
人工智能 前端开发 Devops
.NET技术自发布以来,在软件开发领域发挥了重要作用
【9月更文挑战第12天】.NET技术自发布以来,在软件开发领域发挥了重要作用。本文分为三部分探讨其在现代开发中的应用:首先介绍.NET的核心价值,包括语言多样性、强大的开发工具支持、丰富的类库、跨平台能力和活跃的社区;接着分析其在企业级应用、Web开发、移动应用、云服务及游戏开发中的实际应用;最后讨论.NET面临的挑战与未来趋势,如性能优化、容器化、AI集成及跨平台框架竞争等。通过不断的技术创新和社区驱动,.NET将持续推动软件开发的进步。
39 4
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7

热门文章

最新文章