开发者社区> 嗯哼9925> 正文

发布一个从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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
不推荐别的了,IDEA 自带的数据库工具就很牛逼!
MySQL 等数据库客户端软件市面上非常多了,别的栈长就不介绍了, 其实 IntelliJ IDEA 自带的数据库工具就很牛逼,不信你继续往下看。
65 0
idea如何开启Run DashBoard【工具使用】
idea开启Run DashBoard,工具的使用
37 0
XStream(可把javabean转换成XMI的小工具)|学习笔记
快速学习XStream(可把javabean转换成XMI的小工具)
46 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27723 0
新功能:日志服务命令行工具ETL发布!
日志服务命令行工具ETL发布,解决数据采集、分析查询、投递归档、外部整合过程中的数据规整痛点,提供实时、可靠、可扩展、可管理的运行模式支持,以及全面简单的ETL规则,并支持丰富的扩展支持。
3195 0
【我的Android进阶之旅】推荐一款视频转换GIF图片格式的转换工具(Video to GIF)
一、背景 最近想把一些Android Demo的运行效果图获取下来,但是一直使用真机进行调试,在电脑上不好截取一段gif动画。而之前使用模拟器的时候可以使用 GifCam 工具进行屏幕动画截取。
1819 0
最好用的Android黑客应用程序和工具
本文讲的是最好用的Android黑客应用程序和工具,黑客技术,曾被认为是专家的专有领域,但随着技术的崛起和移动安全领域的进步,黑客技术已经变得越来越普遍。随着人们越来越依赖于智能手机和其它的便携式设备来完成他们的日常活动,我们有必要了解一些Android黑客工具。
4374 0
+关注
4716
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载