ASP.NET MVC: PagedList

http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/

In some of his demos, ScottGu used a method that we didn’t include in the MVCToolkit called “PagedList<T>”, which basically pages a Linq query. I’m hoping to include this in the next drop of the Toolkit, but until then, I have the code for you :). Just drop this into a code file on your site, the Extension method will be picked up by any class “using” System.Web.Mvc:

using System;
using System.Collections.Generic;
using System.Linq;

namespace System.Web.Mvc
{
    
public interface IPagedList
    
{
        
int TotalCount
        
{
            
get;
            
set;
        }


        
int PageIndex
        
{
            
get;
            
set;
        }


        
int PageSize
        
{
            
get;
            
set;
        }


        
bool IsPreviousPage
        
{
            
get;
        }


        
bool IsNextPage
        
{
            
get;
        }

    }


    
public class PagedList<T> : List<T>, IPagedList
    
{
        
public PagedList(IQueryable<T> source, int index, int pageSize)
        
{
            
this.TotalCount = source.Count();
            
this.PageSize = pageSize;
            
this.PageIndex = index;
            
this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList());
        }
    

        
public PagedList(List<T> source, int index, int pageSize)
        
{
            
this.TotalCount = source.Count();
            
this.PageSize = pageSize;
            
this.PageIndex = index;
            
this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList());
        }


        
public int TotalCount
        
{
            
getset;
        }


        
public int PageIndex
        
{
            
getset;
        }


        
public int PageSize
        
{
            
getset;
        }


        
public bool IsPreviousPage
        
{
            
get
            
{
                
return (PageIndex > 0);
            }

        }


        
public bool IsNextPage
        
{
            
get
            
{
                
return (PageIndex * PageSize) <=TotalCount;
            }

        }

    }


    
public static class Pagination
    
{
        
public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index, int pageSize)
        
{
            
return new PagedList<T>(source, index, pageSize);
        }


        
public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index)
        
{
            
return new PagedList<T>(source, index, 10);
        }

    }

}
posted @ 2007-12-18 17:09  第一控制.NET  阅读(1070)  评论(0编辑  收藏  举报