发布一个从webform改进而来的asp.net mvc分页工具类

简介:

我在前面的博客里曾经再次总结过一个webform下使用极广的分页辅助类。本文总结一下asp.net mvc下的简单分页工具类,对于需要从事mvc开发的朋友可以参考一下。这个分页辅助类本质上就是直接使用webform下的分页工具类,再配合HtmlHelper扩展方法稍加改进和包装。所有分页过程可以省却很多代码,而且在View(页面)里调用和webform的方式差不多,使用很方便。

 

1、webform下的一个分页辅助类

关于webform下的分页工具类的具体使用介绍,您可以参考这一篇

使用的时候,需要初始化样式,在web.config下可以添加配置:

1
2
3
4
< appSettings >
   <!--分页样式-->
   < add  key="PagerStyle" value="PagerCss"/>
</ appSettings >

 

2、AspNetMvcPager静态类

这个静态类是对MVC下的HtmlHelper添加几个生成分页tag的扩展方法:

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
using  System.Collections.Specialized;
using  System.Text;
 
namespace  System.Web.Mvc
{
     using  DotNet.Common.WebForm;
 
     public  static  class  AspNetMvcPager
     {
         public  static  string  RenderPager( this  HtmlHelper helper, int  leftSize, int  currentPage, int  recordsPerPage, int  totalCount, System.Web.HttpRequest request)
         {
             string  url = GenerateURL(request);
             AspNetPagerControl ctrl = new  AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url);
             string  pagerStr = AspNetPagerControl.RenderPager(ctrl);
             return  GeneratePagerString(pagerStr);
         }
 
         public  static  string  RenderPager( this  HtmlHelper helper, int  leftSize, int  currentPage, int  recordsPerPage, int  totalCount, string  baseString)
         {
             AspNetPagerControl ctrl = new  AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString);
             string  pagerStr = AspNetPagerControl.RenderPager(ctrl);
             return  GeneratePagerString(pagerStr);
 
         }
 
         public  static  string  RenderStatisticPager( this  HtmlHelper helper, int  leftSize, int  currentPage, int  recordsPerPage, int  totalCount, System.Web.HttpRequest request)
         {
             string  url = GenerateURL(request);
             AspNetPagerControl ctrl = new  AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, url);
             string  pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl);
             return  GeneratePagerString(pagerStr);
         }
 
         public  static  string  RenderStatisticPager( this  HtmlHelper helper, int  leftSize, int  currentPage, int  recordsPerPage, int  totalCount, string  baseString)
         {
             AspNetPagerControl ctrl = new  AspNetPagerControl(currentPage, recordsPerPage, totalCount, leftSize, baseString);
             string  pagerStr = AspNetPagerControl.RenderStatisticPager(ctrl);
             return  GeneratePagerString(pagerStr);
         }
 
         private  static  string  GenerateURL(System.Web.HttpRequest request)
         {
             StringBuilder url = new  StringBuilder();
             url.Append(request.Url.AbsolutePath);
             NameValueCollection collection = request.QueryString;
             string [] keys = collection.AllKeys;
             int  counter = 0;
             for  ( int  i = 0; i < keys.Length; i++)
             {
                 if  (keys[i].ToLower() == "pageindex" )
                 {
                     continue ;
                 }
                 url.AppendFormat( "{0}{1}={2}" , (counter == 0 ? "?"  : "&" ), keys[i], collection[keys[i]]);
                 counter++;
             }
             return  url.ToString();
         }
         private  static  string  GeneratePagerString( string  pagerStr)
         {
             TagBuilder builder = new  TagBuilder( "div" );
             builder.IdAttributeDotReplacement = "_" ;
             builder.GenerateId(System.Guid.NewGuid().ToString());
             builder.InnerHtml = pagerStr;
             return  builder.ToString();
         }
     }
}

 

3、控制器里查询和传参

在控制器里,view里有时候是通过点击查询按钮(POST方式)进行搜索的,有时候是点击分页链接通过url传参的(GET方式),所以控制查询条件和正确分页,都要在ctroller里做好。本文的示例代码给的代码相当简单,分页参数的获取也非常直接,您可以自己分析一下。

 

4、页面调用

和webform下类似,通过<%= %>直接绑定进行页面呈现:

1
2
3
4
5
6
7
<%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%>
 
<%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, HttpContext.Current.Request)%>
 
<%=Html.RenderPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, string .Format( "{0}?firstname={1}&lastname={2}" , HttpContext.Current.Request.Url.AbsolutePath,pager.FirstName,pager.LastName))%>
 
<%=Html.RenderStatisticPager(pager.LeftSize, pager.CurrentPage, pager.RecordsPerPg, pager.TotalCount, string .Format( "{0}?firstname={1}&lastname={2}" , HttpContext.Current.Request.Url.AbsolutePath, pager.FirstName, pager.LastName))%>

总体来说,使用起来非常简单,其中传参和url的确定是重点。

需要说明的是,mvc和webform非常明显不同的一个地方,就是mvc对url 进行了重写,一不小心就可能造成404错误发生的惨剧,所以您在传参的时候务必注意。

有图有真相:

mvcpager





本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2011/01/03/1925011.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
开发框架 JavaScript .NET
asp.net中条件查询+分页
asp.net中条件查询+分页
16 1
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .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,然后在重定向到另
99 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
52 0
|
8月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(完:内附源码)
经过一段时间的准备,【ASP.NET Core MVC开发实战之商城系统】已经完成,目前代码已开发完成,先将全部内容整理分享,如有不足之处,还请指正。
107 0
|
8月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(六)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情,购物车等功能的开发,今天继续讲解订单管理功能开发,仅供学习分享使用,如有不足之处,还请指正。
215 0

相关实验场景

更多