2011-08-14 44 views
0

我命名PagedList了类,看起来像这样:问题与MVC分页表3

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无关。

任何人有什么想法我做错了什么?


UPDATE:
截图:

enter image description here

+0

你能向我们展示一些模型输出大致的文字吗? – Aaronontheweb

+0

我不确定我是否了解您的请求 – PsychoCoder

+0

“当我去模型时,这是一个巨大的列表,与我在客户控制器中创建的PagedList无关。” - 通过举例的方式解释这意味着什么。 – Aaronontheweb

回答

0

PagedList是可枚举的。要访问单独的UserInfo对象,请使用@foreach(模型中的var userInfo)

其他人提到了使用IQueryable。在边界处使用ToArray()或ToList()是一种很好的做法。您的存储库是一个边界,所以我会考虑将分页逻辑移动到它并使其返回PagedList对象或构建一个必需的数据。

0

模型类,现在是System.Web.Mvc.ViewPage<PagedList<Clusteris.Data.UserInfo>>,而不是PagedList<Clusteris.Data.UserInfo> - 这可能是为什么你看到所有这些奇怪的数据对您的模型。

System.Web.Mvc.ViewPage是用于渲染模型的组件,不应该是模型本身。将您的模型类型更改为PagedList<Clusteris.Data.UserInfo>,它应该可以工作。

+0

我将模型更改为_ @ model PagedList _并且我可以看到PagedList类中的项目,但UserInfo上没有任何内容,因此我认为我越来越接近 – PsychoCoder

+0

另一个问题可能是您对IQueryable的使用。 ..除非在将模型提供给您的视图后再对模型进行其他查询,只需将其更改为常规的旧IEnumerable或IList即可 - 这样,您的视图就可以正确枚举它。 – Aaronontheweb