ASP.NET MVC 3.0 分页控件

看到一些哥们在写MVC的分页控件,我也来凑个热闹,新手上路,请多多包涵,提出中肯意见,不要一味的拍砖,打击士气,以后还会有很多其它控件发布.

效果如下

2011042402535977.gif

代码如下

1 /// <summary>
2 /// 分页控件
3 /// </summary>
4 /// <param name="helper"></param>
5 /// <param name="PageSize"> 单页条数 </param>
6 /// <param name="CurrentPage"> 当前页 </param>
7 /// <param name="RecordCount"> 总记录数 </param>
8 /// <param name="Attribute"> 扩展参数 </param>
9 /// <returns></returns>
10   public static MvcHtmlString Pagination( this HtmlHelper helper, Int32 PageSize, Int32 CurrentPage, Int32 RecordCount, Object Attribute)
11 {
12 /*
13 * <span>共:{RecordCount}条 {PageSize}条/页 {CurrentPage}页/{PageCount}页</span> {List}
14 * <span>Page {CurrentPage} of {PageCount} ({RecordCount} items) PageSize:{PageSize}</span> {List}
15 * @ViewType = 0, 0中文 1英文 2自定义中文 3自定义英文
16 * @Template = "<span>共:{RecordCount}条 {PageSize}条/页 {CurrentPage}页/{PageCount}页</span> {List}",
17 * @Postfix = "",
18 * @VirtualPath = "",
19 * @Identifier = "page",
20 * @Encrypt = false }
21 */
22
23 Int32 ViewType = GetInt32(GetValue(Attribute, " ViewType " ));
24 String Template = GetString(GetValue(Attribute, " Template " ));
25 String Postfix = GetString(GetValue(Attribute, " Postfix " ));
26 String VirtualPath = GetString(GetValue(Attribute, " VirtualPath " ));
27 String Identifier = GetString(GetValue(Attribute, " Identifier " ));
28 Boolean Encrypt = GetBoolean(GetValue(Attribute, " Encrypt " ));
29 Template = ! String.IsNullOrEmpty(Template) ? String.Format( " {0}{1} " , " \n\t " , SetString(Template)) :
30 ViewType == 0 || ViewType == 3 ? " \t<span>共:{RecordCount}条 {PageSize}条/页 {CurrentPage}页/{PageCount}页</span> {List} " :
31 " \t<span>Page {CurrentPage} of {PageCount} ({RecordCount} items) PageSize:{PageSize}</span> {List} " ;
32
33 Int32 pagecount = (Int32)Math.Ceiling((Double)RecordCount / (Double)PageSize);
34 Int32 startPage = 0 ;
35 Int32 endPage = 0 ;
36
37 if (pagecount <= 10 || CurrentPage <= 3 )
38 {
39 startPage = 1 ;
40 endPage = 10 > pagecount ? pagecount : 10 ;
41 }
42 else
43 {
44 if (pagecount - CurrentPage <= 7 )
45 {
46 startPage = pagecount - 9 ;
47 endPage = pagecount;
48 }
49 else
50 {
51 startPage = CurrentPage - 2 ;
52 endPage = CurrentPage + 7 ;
53 }
54 }
55
56 Postfix = ViewType == 0 || ViewType == 1 ? "" : Postfix;
57 StringBuilder html = new StringBuilder();
58 String CurrUrl = "" ;
59
60 if (ViewType == 0 || ViewType == 1 )
61 {
62 CurrUrl = System.Web.HttpContext.Current.Request.RawUrl;
63 CurrUrl = DeleteUrlParameter(Identifier);
64 Identifier = Identifier + " = " ;
65 }
66 else
67 {
68 CurrUrl = VirtualPath;
69 Identifier = "" ;
70 }
71
72 if (CurrentPage > 1 )
73 {
74 html.AppendFormat( " \n\t<a href=\"{0}{1}1\" title=\"{2}\"><<</a>\n\t<a href=\"{0}{1}{3}\" title=\"{4}\"><</a>\n " ,
75 CurrUrl,
76 Identifier,
77 ViewType == 0 || ViewType == 3 ? " 首页 " : " First " ,
78 CurrentPage - 1 ,
79 ViewType == 0 || ViewType == 3 ? " 上一页 " : " Previous "
80 );
81 }
82
83 if (CurrentPage > 10 )
84 {
85 html.AppendFormat( " \t<a href=\"{0}{1}{2}\" title=\"{3}\">....</a>\n " ,
86 CurrUrl,
87 Identifier,
88 CurrentPage - 10 ,
89 ViewType == 0 || ViewType == 3 ? " 上10页 " : " Previous Ten Pages "
90 );
91
92 }
93
94 for (Int32 j = startPage; j <= endPage; j ++ )
95 {
96 html.Append(CurrentPage == j ? String.Format( " \t<a class=\"curr\" href=\"javascript:void(0)\">{0}</a> \n " , j) : String.Format( " \t<a href=\"{0}{1}{2}\" title=\"{2}\">{2}</a> \n " , CurrUrl, Identifier, j));
97 }
98
99 if (pagecount - CurrentPage > 10 )
100 {
101 html.AppendFormat( " \t<a href=\"{0}{1}{2}\" title=\"{3}\">....</a>\n " ,
102 CurrUrl,
103 Identifier,
104 (CurrentPage + 10 ),
105 ViewType == 0 || ViewType == 3 ? " 下10页 " : " Next Ten Pages "
106 );
107 }
108
109 if (pagecount > CurrentPage)
110 {
111 html.AppendFormat( " \t<a href=\"{0}{1}{2}\" title=\"{3}\">></a> \n\t<a href=\"{0}{1}{4}\" title=\"{5}\">>></a> \n " ,
112 CurrUrl,
113 Identifier,
114 (CurrentPage + 1 ),
115 ViewType == 0 || ViewType == 3 ? " 下一页 " : " Next " ,
116 pagecount,
117 ViewType == 0 || ViewType == 3 ? " 末页 " : " Last "
118 );
119 }
120
121 String tx = Template.Replace( " {RecordCount} " , RecordCount.ToString()).Replace( " {PageSize} " , PageSize.ToString()).Replace( " {PageCount} " , pagecount.ToString()).Replace( " {CurrentPage} " , CurrentPage.ToString()).Replace( " {List} " , html.ToString());
122
123 return MvcHtmlString.Create(tx);
124 }

此分页控件支持URL附加参数方式,比如说  xx?page=1 这种方式,

亦能实现自定义的URL得写方式,比如说 news-list-1(分页码).html

支付中英文两种界面显示方式,

对应CSS文件为:

1 .Pagination a { display : block ; padding : 1px 6px ; border : 1px solid #14A7FF ; float : left ; margin-left : 2px ; color : #14A7FF ; font : normal 12px 'Arial' }
2 .Pagination a:hover { background : #14A7FF ; color : #fff ; border : 1px solid #14A7FF ; }
3 .Pagination a.curr { color : #CB05F5 ; background : #fff ; border : 1px solid #CB05F5 ; }
4 .Pagination a.curr:hover { color : #CB05F5 ; background : #fff ; border : 1px solid #CB05F5 ; }
5 .Pagination a.noboder { display : block ; padding : 1px 6px ; float : left ; margin-left : 2px ; border : 0 ; }
6 .Pagination a.noboder:hover { display : block ; padding : 1px 6px ; float : left ; margin-left : 2px ; border : 0 ; background : none ; }
7 .Pagination span { float : left ; margin : 3px 6px 0 0 ; display : block ; }

调用方式为:

1 < div class ="Pagination" > @Html.Pagination((int)ViewBag.PageSize, (int)ViewBag.Index, (int)ViewBag.RecordCount, new { @ViewType = 0, @Identifier = "page", @Encrypt = false }) </ div >

具体参数为:

/*
*
< span > 共:{RecordCount}条 {PageSize}条/页 {CurrentPage}页/{PageCount}页 </ span > {List}
*
< span > Page {CurrentPage} of {PageCount} ({RecordCount} items) PageSize:{PageSize} </ span > {List}
* @ViewType = 0, 0中文 1英文 2自定义中文 3自定义英文
* @Template = "
< span > 共:{RecordCount}条 {PageSize}条/页 {CurrentPage}页/{PageCount}页 </ span > {List}",
* @Postfix = "",
* @VirtualPath = "",
* @Identifier = "page",
* @Encrypt = false }
*/

本站具备完整的演示DEMO,下载地址为: 点击我下载

此为第一个MVC 3控件,请多多包涵,

原创作品,转载请注明出处,转载者不得以本示例去CSDN上骗下载分

转载于:https://www.cnblogs.com/chaige/archive/2011/04/24/mvcpagination.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值