ASP.NET MVC: PagedList<T>

In some of his demos, ScottGu used a method that we didn't include in the MVCToolkit called "PagedList", 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 :).

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              {             get; set;         }                public int PageIndex               {             get; set;         }                public int PageSize         {             get; set;         }        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);        }            }}