asp.net mvc 分页控件 MvcPager修改;使用范围增大

其实也没什么,就是记录下来和大家分享下。

做asp.net mvc 2.0 的项目,肯定要用到分页功能了,上网搜了几下。偶然间发现MvcPager分页控件,感觉要用的功能都有了非常喜欢啊。(PS:写这个控件的哥们是个个听力有障碍的残疾人,在此敬佩一下,视早日康复)

于是乎查看了一下使用方法,很简单,如下:

在自己的linq查询集合上.ToPagedList(pageIndex,pageSize)即可,果然很方便。马上放到项目中使用,这时悲剧了。找不到ToPagedList(***)方法。分析原因ToPagedList应该是个扩展方法。我项目中没有用到Linq,查询全部是基本的ado.net reader返回的List<T>集合。感觉问题肯定出在这里。没有List<T>集合也就是IEnumerable<T>等的扩展方法。于是乎上网搜了下MvcPager源码,哈哈。在codeplex看到了。感谢cnblogs、csdn、msdn、非诚勿扰啊。开源的,我顶开源啊。哈哈。

接下来就是下载了源码,很小。打开项目一眼就看到了一个类:PageLinqExtensions.cs ,字面理解肯定就是它啦;打开看果然如此:

代码
public static class PageLinqExtensions
{
        
public static PagedList<T> ToPagedList<T>
            (
                
this IQueryable<T> allItems,
                
int pageIndex,
                
int pageSize
            )
        {
            
if (pageIndex < 1)
                pageIndex 
= 1;
            var itemIndex 
= (pageIndex-1* pageSize;
            var pageOfItems 
= allItems.Skip(itemIndex).Take(pageSize);
            var totalItemCount 
= allItems.Count();
            
return new PagedList<T>(pageOfItems, pageIndex, pageSize, totalItemCount);
        }
}

看这个扩展方法 ToPagedList<T>里面的类型参数,IQueryable<T>没错了,所以不支持List<T>的转换。于是乎也不管类名规不规范了,加了下面代码:

代码
 public static PagedList<T> ToPagedList<T>(this IEnumerable<T> allItems,int pageIndex,int pageSize)
        {
            pageIndex
=pageIndex<1?1:pageIndex;
            var itemIndex
=(pageIndex-1)*pageSize;
            var pageOfItems 
= allItems.Skip(itemIndex).Take(pageSize);
            var totalItemCount 
= allItems.Count();
            
return new PagedList<T>(pageOfItems, pageIndex, pageSize, totalItemCount);
        }

重载了一个扩展方法,类型参数为IEnumerable<T>,这个重载用来支持List<T>的ToPagedList(***)分页转换。到此完事。项目测试可用。

PS:虽然现在Linq,Entity Framework 啥的越来越流行了,但是以前的ado.net还是大有人用啊。所以还是得考虑进去啊。(如有不对,欢迎指证,发现已晚,马上下架)

原文地址:https://www.cnblogs.com/assion/p/1765384.html