一起谈.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          }

 

目录
相关文章
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
48 7
|
3月前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
72 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
75 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
56 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
145 0
|
前端开发 数据安全/隐私保护
net MVC中的模型绑定、验证以及ModelState
net MVC中的模型绑定、验证以及ModelState 模型绑定 模型绑定应该很容易理解,就是传递过来的数据,创建对应的model并把数据赋予model的属性,这样model的字段就有值了。
1698 0
|
7月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
212 0
|
7月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
84 0
|
7月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
364 5