Мы разработали решение для упрощения текущего PagedList до чего-то, что будет более сериализуемым и немного более приспособленным к нашему решению. Вместо создания собственного списка / коллекции мы создали класс, содержащий список / коллекцию.
Раньше мы теряли пользовательские свойства pagedlist, когда он был десериализован на стороне клиента. У него все еще были все элементы в списке, но в нем отсутствовали свойства.
Это основано на коде Троя Гуда, который, как мне кажется, основан на неопубликованном коде Microsoft MVC. Более подробную информацию можно найти здесь: http://www.squaredroot.com/2009/06/15/return-of-the-pagedlist/
public class PagedList<T> : IPagedList<T>
{
public PagedList()
{
}
public PagedList(IEnumerable<T> source, int pageIndex, int pageSize)
: this(source == null ? new List<T>().AsQueryable() : source.AsQueryable(), pageIndex, pageSize)
{
}
private PagedList(IQueryable<T> source, int pageIndex, int pageSize)
{
TotalRecords = source.Count();
// add items to internal list
if (TotalRecords > 0)
if (pageIndex == 0)
Data = source.Take(pageSize).ToList();
else
Data = source.Skip((pageIndex) * pageSize).Take(pageSize).ToList();
}
public int TotalRecords { get; set; }
public IEnumerable<T> Data { get; set; }
}
, а затем фактическая реализация через следующее расширение:
public static PagedList<T> ToPagedList<T>(this IEnumerable<T> source, int pageIndex, int pageSize)
{
return new PagedList<T>(source, pageIndex, pageSize);
}