我有一个名为PagedList的类,如下所示:
public class PagedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public bool HasPrevious
{
get
{
return (this.PageIndex > 0);
}
}
public bool HasNext
{
get
{
return (this.PageIndex + 1 < this.TotalPages);
}
}
public PagedList(IEnumerable<T> source, int pageIndex, int pageSize)
{
this.PageIndex = pageIndex;
this.PageSize = pageSize;
this.TotalCount = source.Count();
this.TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
this.AddRange(source.Skip(this.PageIndex * this.PageSize).Take(this.PageSize));
}
}
在我的客户控制器中,我这样使用它:
public ActionResult Index(int? page)
{
IRepository<UserInfo> profile = ObjectFactory.GetInstance<IRepository<UserInfo>>();
const int pageSize = 25;
IQueryable<UserInfo> profiles = profile.GetAll().OrderBy(x => x.LastName).AsQueryable<UserInfo>();
var pagedCustomers = new PagedList<UserInfo>(profiles, page ?? 0, pageSize);
return View(pagedCustomers);
}
最后在我的Index.cshtml文件中,我设置了我的模型:
@model System.Web.Mvc.ViewPage<PagedList<Clusteris.Data.UserInfo>>
当我去模特时。这是一个巨大的列表,与我在Customers控制器中创建的PagedList无关。
任何人对我做错了什么有任何想法?
更新
截图:
答案 0 :(得分:0)
您的模型类现在是System.Web.Mvc.ViewPage<PagedList<Clusteris.Data.UserInfo>>
而不是PagedList<Clusteris.Data.UserInfo>
- 这可能是您在模型上看到所有这些奇怪数据的原因。
System.Web.Mvc.ViewPage是用于渲染模型的组件,不应该是模型本身。将您的模型类型更改为PagedList<Clusteris.Data.UserInfo>
,它应该可以正常工作。
答案 1 :(得分:0)
PagedList是可枚举的。要访问单个UserInfo对象,请使用@foreach(模型中的var userInfo)
其他人提到过使用IQueryable。在边界处使用ToArray()或ToList()是一种很好的做法。您的存储库是边界,因此我会考虑将分页逻辑移动到它并使其返回PagedList对象或构造它的必要数据。