博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enhanced PagedList for ASP.NET MVC
阅读量:4571 次
发布时间:2019-06-08

本文共 3889 字,大约阅读时间需要 12 分钟。

ASP.NET MVC已经发布了新的源代码,但不是官方版本。大家可以到看看。

在实际项目中,肯定不会像Scottgu的demo那么简单。比如我们需要将数据分页显示。这的确是一个非常重要的功能。
MVCToolkit下一个版本会包含一个支持数据分页,但我已经等不及了。
下面就是经过改进的分页类。
首先定义一个接口来包含我们需要的功能。

 1
    
/**/
/// <summary>
 2    /// 分页列表接口
 3    /// </summary>
 4
    
public
 
interface
 IPagedList
 5
    
{
 6        int PageSize getset; }
 7        int PageNumber getset; }
 8
 9        int TotalCount get; }
10        int PageCount get; }
11        bool HasPreviousPage get; }
12        bool HasNextPage get; }
13    }
14
现在实现PagedList<T>:
 1
    
/**/
/// <summary>
 2    /// 分页列表泛型类
 3    /// </summary>
 4    /// <typeparam name="T">集合元素类型</typeparam>
 5
    
public
 
class
 PagedList
<
T
>
 : List
<
T
>
, IPagedList
 6
    
{
 7        /**//// <summary>
 8        /// 利用现有的IQueryable&lt;T&gt;列表创建一个新的分页列表
 9        /// </summary>
10        /// <param name="source">现有的元素集合</param>
11        /// <param name="page">页号</param>
12        /// <param name="pageSize">分页大小</param>
13        public PagedList(IQueryable<T> source, int page, int pageSize)
14        {
15            this.TotalCount = source.Count();
16            this.PageNumber = page;
17            this.PageSize = pageSize;
18
19            if (this.PageCount < page || page <= 0)
20                throw new ArgumentOutOfRangeException("page");
21
22            this.AddRange(source.Skip((page - 1* pageSize).Take(pageSize).ToList());
23        }
24
25        /**//// <summary>
26        /// 利用现有的列表List&lt;T&gt;创建一个新的分页列表
27        /// </summary>
28        /// <param name="source">现有的元素集合</param>
29        /// <param name="page">页号</param>
30        /// <param name="pageSize">分页大小</param>
31        public PagedList(List<T> source, int page, int pageSize)
32        {
33            this.TotalCount = source.Count();
34            this.PageNumber = page;
35            this.PageSize = pageSize;
36
37            if (this.PageCount < page || page <= 0)
38                throw new ArgumentOutOfRangeException("page");
39
40            this.AddRange(source.Skip((page - 1* pageSize).Take(pageSize).ToList());
41        }
42
43        /**//// <summary>
44        /// 获取表示列表元素总个数的整数
45        /// </summary>
46        public int TotalCount getprivate set; }
47
48        /**//// <summary>
49        /// 获取或设置一个表示当前页号的整数
50        /// </summary>
51        public int PageNumber getset; }
52        
53        /**//// <summary>
54        /// 获取或设置一个整数来表示分页大小
55        /// </summary>
56        public int PageSize getset; }
57
58        /**//// <summary>
59        /// 获取一个表示总页数的整数
60        /// </summary>
61        public int PageCount
62        {
63            get
64            {
65                if (PageSize == 0)
66                    throw new ArgumentOutOfRangeException("page");
67
68                int remainder = TotalCount % PageSize;
69
70                if (remainder == 0)
71                    return TotalCount / PageSize;
72                else
73                    return (TotalCount / PageSize) + 1;
74            }
75        }
76
77        /**//// <summary>
78        /// 获取一个布尔值表示当前页是否有上一页
79        /// </summary>
80        public bool HasPreviousPage
81        {
82            get
83            {
84                return (PageNumber - 1> 0;
85            }
86        }
87
88        /**//// <summary>
89        /// 获取一个布尔值表示当前页是否有下一页
90        /// </summary>
91        public bool HasNextPage
92        {
93            get
94            {
95                return (PageNumber * PageSize) < TotalCount;
96            }
97        }
98    }
99
再建立一个扩展类,就完成了添加分页功能。建议将这些类放在System.Web.Mvc命名空间下,这样就可以直接在您的项目中使用了:
 1
    
/**/
/// <summary>
 2    /// 分页列表扩展类
 3    /// </summary>
 4
    
public
 
static
 
class
 Pagination
 5
    
{
 6        /**//// <summary>
 7        /// 将IQueryable&lt;T&gt;转换成分页列表PagedList&lt;T&gt;的一个实例
 8        /// </summary>
 9        /// <typeparam name="T">元素类型</typeparam>
10        /// <param name="source">要转换的集合,这里是LINQ结果集</param>
11        /// <param name="page">当前页号</param>
12        /// <param name="pageSize">分页大小</param>
13        /// <returns></returns>
14        public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int page, int pageSize)
15        {
16            return new PagedList<T>(source, page, pageSize);
17        }
18
19        /**//// <summary>
20        /// 使用默认分页大小(pageSize=10)将IQueryable&lt;T&gt;转换成分页列表PagedList&lt;T&gt;的一个实例,
21        /// </summary>
22        /// <typeparam name="T">元素类型</typeparam>
23        /// <param name="source">要转换的集合,这里是LINQ结果集</param>
24        /// <param name="page">当前页号</param>
25        /// <returns></returns>
26        public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int page)
27        {
28            return new PagedList<T>(source, page, 5);
29        }
30    }
31
扩展完成。我们现在可以从LINQ数据集里创建PagedList了:
图1:将LINQ数据集转换为分页列表

转载于:https://www.cnblogs.com/shinyzhu/archive/2008/04/22/enhanced-pagedlist-for-aspnet-mvc.html

你可能感兴趣的文章
Redis键的序列化和反序列化
查看>>
启动程序添加启动脚本
查看>>
CF1194E Count The Rectangles
查看>>
Gym100212C Order-Preserving Codes
查看>>
ARC076F Exhausted
查看>>
TC1570 DesertWind
查看>>
CF277D Google Code Jam
查看>>
(七)unittest单元测试框架
查看>>
(八) 自动化测试的实例(以浏览器为例)
查看>>
js获取单选框和复选框的值并判断值存在后允许转跳
查看>>
任务一:零基础HTML编码
查看>>
C#类和结构以及堆和栈大烩菜(本来就迷,那就让暴风来的更猛烈吧!)
查看>>
94. Binary Tree Inorder Traversal
查看>>
MongoDB安装及多实例启动
查看>>
[css]我要用css画幅画(三)
查看>>
eletron打包
查看>>
numpy
查看>>
连接池
查看>>
使用易语言COM对象取文件版本
查看>>
2.16.10.init进程详解1
查看>>