MVC HtmlHelper擴(kuò)展類PagingHelper實(shí)現(xiàn)分頁(yè)功能,供大家參考,具體內(nèi)容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
|
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace HtmlHelperMvc.Models { /// <summary> /// 分頁(yè)類如果一個(gè)頁(yè)面顯示兩個(gè)列表只需要復(fù)制該類到項(xiàng)目中重命名一個(gè)就可以 /// </summary> public static class PagingHelper { #region 屬性Property /// <summary> /// 當(dāng)前頁(yè)碼 /// </summary> private static int ? _currentPage = null ; /// <summary> /// 當(dāng)前頁(yè)碼 /// </summary> public static int CurrentPage { get { return _currentPage ?? 1; } set { _currentPage = value; } } /// <summary> /// 每頁(yè)記錄條數(shù) /// </summary> private static int ? _pageSize = null ; /// <summary> /// 每頁(yè)記錄條數(shù) /// </summary> public static int PageSize { get { return _pageSize ?? 15; } set { _pageSize = value; } } /// <summary> /// 是否顯示上一頁(yè) /// </summary> public static bool HasPreviousPage { get { return (CurrentPage > 1); } } /// <summary> /// 是否顯示下一頁(yè) /// </summary> public static bool HasNextPage { get { return (CurrentPage < TotalPages); } } /// <summary> /// 當(dāng)前頁(yè): /// </summary> public static string CurrentPageDisplayName { get ; set ; } /// <summary> /// 每頁(yè)顯示: /// </summary> public static string PageSizeDisplayName { get ; set ; } public static string FirstDisplayName { get ; set ; } public static string PreDisplayName { get ; set ; } public static string NextDisplayName { get ; set ; } public static string LastDisplayName { get ; set ; } public static string TotalCountDisplayName { get ; set ; } public static string TotalPagesDisplayName { get ; set ; } /// <summary> /// 總條數(shù) /// </summary> public static int TotalCount { get ; set ; } public static int TotalPages { get { return ( int )Math.Ceiling(TotalCount / ( double )PageSize); //return (TotalCount % PageSize == 0 ? TotalCount / PageSize : TotalCount / PageSize + 1); } } /// <summary> /// 設(shè)置分頁(yè)url eg:/Admin/Product/Index /// </summary> public static string PagingUrl { get ; set ; } /// <summary> /// 默認(rèn)page,設(shè)置分頁(yè)參數(shù)名 eg:/Admin/Product/Index?PagingParamName=1 /// </summary> public static string PagingParamName { get ; set ; } #endregion #region Paging String /// <summary> /// MVC分頁(yè) 如果用jquery分頁(yè)只需要class不需要href,用以下實(shí)現(xiàn): /// $(".class值").live("click", function () { /// var page = $(this).attr("pagingParamName值"); /// $("#order").html("").load("/Customer/Order?page="+page); /// });live自動(dòng)給遍歷增加事件 /// </summary> /// <param name="html"></param> /// <param name="htmlAttributes">new {@class="grey",pagingParamName="page",href="/Admin/Product/Index" rel="external nofollow" } pagingParamName默認(rèn)page,匿名類添加控件屬性</param> /// <returns></returns> public static MvcHtmlString Paging( this System.Web.Mvc.HtmlHelper html, object htmlAttributes) { RouteValueDictionary values = new RouteValueDictionary(htmlAttributes); #region 屬性賦值 if (values[ "href" ] != null ) { PagingUrl = values[ "href" ].ToString(); } if (values[ "pagingParamName" ] != null ) { PagingParamName = values[ "pagingParamName" ].ToString(); values.Remove( "pagingParamName" ); } else { PagingParamName = "page" ; } #endregion #region 分頁(yè)最外層div/span TagBuilder builder = new TagBuilder( "div" ); //span //創(chuàng)建Id,注意要先設(shè)置IdAttributeDotReplacement屬性后再執(zhí)行GenerateId方法. //builder.IdAttributeDotReplacement = "_"; //builder.GenerateId(id); //builder.AddCssClass(""); //builder.MergeAttributes(values); builder.InnerHtml = PagingBuilder(values); #endregion return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal)); //解決直接顯示html標(biāo)記 } private static string PagingBuilder(RouteValueDictionary values) { #region 條件搜索時(shí)包括其他參數(shù) StringBuilder urlParameter = new StringBuilder(); NameValueCollection collection = HttpContext.Current.Request.QueryString; string [] keys = collection.AllKeys; for ( int i = 0; i < keys.Length; i++) { if (keys[i].ToLower() != "page" ) { urlParameter.AppendFormat( "&{0}={1}" , keys[i], collection[keys[i]]); } } #endregion //CurrentPage = Convert.ToInt32(HttpContext.Current.Request.QueryString["page"] ?? "0"); StringBuilder sb = new StringBuilder(); #region 分頁(yè)統(tǒng)計(jì) sb.AppendFormat( "Total {0} Records Page {1} of {2} " , TotalCount, CurrentPage, TotalPages); #endregion #region 首頁(yè) 上一頁(yè) sb.AppendFormat(TagBuilder(values, 1, " First" )); //sb.AppendFormat("<a href={0}?page=1{1}>First</a> ",url,urlParameter); if (HasPreviousPage) { sb.AppendFormat(TagBuilder(values, CurrentPage - 1, " Prev " )); //sb.AppendFormat("<a href={0}?page={1}{2}>Prev</a> ", url, CurrentPage - 1, urlParameter); } #endregion #region 分頁(yè)邏輯 if (TotalPages > 10) { if ((CurrentPage + 5) < TotalPages) { if (CurrentPage > 5) { for ( int i = CurrentPage - 5; i <= CurrentPage + 5; i++) { sb.Append(TagBuilder(values, i, i.ToString())); } } else { for ( int i = 1; i <= 10; i++) { sb.Append(TagBuilder(values, i, i.ToString())); } } sb.Append( "... " ); } else { for ( int i = CurrentPage - 10; i <= TotalPages; i++) { sb.Append(TagBuilder(values, i, i.ToString())); } } } else { for ( int i = 1; i <= TotalPages; i++) { sb.Append( " " + TagBuilder(values, i, i.ToString()) + " " ); } } #endregion #region 下一頁(yè) 末頁(yè) if (HasNextPage) { sb.AppendFormat(TagBuilder(values, CurrentPage + 1, "Next" )); //sb.AppendFormat("<a href={0}?page={1}{2}>Next</a> ", url, CurrentPage + 1, urlParameter); } sb.AppendFormat(TagBuilder(values, TotalPages, "Last" )); //sb.AppendFormat("<a href={0}?page={1}{2}>Last</a>",url,TotalPages,urlParameter); #endregion return sb.ToString(); } private static string TagBuilder(RouteValueDictionary values, int i, string innerText) { values[PagingParamName] = i; TagBuilder tag = new TagBuilder( "a" ); if (PagingUrl != null ) { values[ "href" ] = PagingUrl + "?" + PagingParamName + "= " + i + " " ; } if (CurrentPage == i && innerText != " First" && innerText != " Last" ) { values[ "id" ] = "on" ; } else { tag.Attributes[ "id" ] = "" ; } tag.MergeAttributes(values); tag.SetInnerText(innerText); return tag.ToString(); } #endregion } } |
后臺(tái)Controller代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// // GET: /Home/ public ActionResult Index( int ? page) { page = page ?? 1; PagingHelper.CurrentPage = Convert.ToInt32(page); PagingHelper.PageSize = 20; //{獲取數(shù)據(jù)集的中條數(shù),以及分頁(yè)的數(shù)據(jù)集} PagingHelper.TotalCount = 2000; return View(); } |
前臺(tái)頁(yè)面代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
@{ ViewBag.Title = "Index"; } @using HtmlHelperMvc.Models; < h2 >Index</ h2 > < hr /> < style type = "text/css" > #on { color: #FFF; background-color: #337AB7; border-color: #337AB7; } .pagination a { margin-right: 3px; padding: 5px 10px; font-size: 12px; text-decoration: none; background-color: #fff; border: 1px solid #ddd; cursor: pointer; display: inline-block; border-radius: 3px; } a { color: #337ab7; text-decoration: none; } a { background-color: transparent; } * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } </ style > < script src = "~/Scripts/jquery-1.8.2.js" ></ script > < script type = "text/javascript" > $(function () { $(".pagination .active").live("click", function () { $("#page").val($(this).attr("page")); $("#form_Submit").submit(); }); }); </ script > < form id = "form_Submit" action = "/Home/Index" method = "post" > < div class = "fix" > < div class = "page" > < div class = "pagination pagination-sm pull-right" id = "pageDiv" style = "margin: 0px 0;" > < input type = "hidden" id = "page" name = "page" value = "@PagingHelper.CurrentPage" /> @Html.Paging(new { @class = "active" }) </ div > </ div > </ div > </ form > |
最終效果圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。