MVC分页

本文详细介绍了分页功能的实现过程,包括分页代码、分页模式选择、以及如何生成普通分页和数字分页。文章还展示了如何通过控制器与视图进行交互,最终在网页上展示分页效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页效果如下:

分页代码:

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 HtmlHelperhelper, string id, int currentPageIndex, int pageSize, int recordCount, object htmlAttributes, string className,PageModemode)
27 {
28 TagBuilderbuilder = 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 HtmlHelperhelper, 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 HtmlHelperhelper, 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 HtmlHelperhelper, string id, int currentPageIndex, int pageSize, int recordCount,PageModemode)
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 HtmlHelperhelper, string id, int currentPageIndex, int pageSize, int recordCount, string className,PageModemode)
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,PageModemode)
100 {
101 int pageCount = (recordCount % pageSize == 0 ? recordCount / pageSize:recordCount / pageSize + 1 );
102 StringBuilderurl = new StringBuilder();
103 url.Append(HttpContext.Current.Request.Url.AbsolutePath + " ?page={0} " );
104 NameValueCollectioncollection = 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 StringBuildersb = 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 StringBuildersb = 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(TPagerpager,TEntityListentityList)
11 {
12 this .Pager = pager;
13 this .EntityList = entityList;
14 }
15 public TPagerPager{ get ; set ;}
16 public TEntityListEntityList{ 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 }

使用示例:

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

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

<asp:ContentID="Content2"ContentPlaceHolderID="MainContent"runat="server">

<h2>NewsListh2>

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

tr>

<%foreach(variteminModel.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 ActionResultNewsList( int boardID, int ? page)
3 {
4 PagerInfopager = new PagerInfo();
5 NewsArticleInfoinfo = 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 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值