zoukankan      html  css  js  c++  java
  • 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还是大有人用啊。所以还是得考虑进去啊。(如有不对,欢迎指证,发现已晚,马上下架)

  • 相关阅读:
    【秋招必备】Redis面试题(2021最新版)
    【秋招必备】Spring Boot面试题(2021最新版)
    【秋招必备】Java基础知识面试题(2021最新版)
    用友二面:如何设计一个高可用、高并发秒杀系统
    万字长文,带你深入理解Java虚拟机!
    小米面试官:说说Spring源码里面的Bean的生命周期!
    苏宁易购三面:写一个脚本获取Linux系统CPU的详细信息,并说出原理!
    易错点。
    APP间传递消息
    KVC, KVO
  • 原文地址:https://www.cnblogs.com/assion/p/1765384.html
Copyright © 2011-2022 走看看