发布一个从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
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
29 7
|
1月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
40 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
38 0
|
2月前
|
开发框架 前端开发 .NET
分享一个 ASP.NET WebForm 使用 Form Authentication 的例子
分享一个 ASP.NET WebForm 使用 Form Authentication 的例子
|
2月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
2月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
96 0
|
前端开发 数据安全/隐私保护
net MVC中的模型绑定、验证以及ModelState
net MVC中的模型绑定、验证以及ModelState 模型绑定 模型绑定应该很容易理解,就是传递过来的数据,创建对应的model并把数据赋予model的属性,这样model的字段就有值了。
1686 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
163 0
|
5月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
71 0
|
5月前
|
开发框架 前端开发 .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,然后在重定向到另
285 5