MVC 3中的分页列表问题

时间:2011-08-14 20:11:18

标签: asp.net-mvc-3

我有一个名为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无关。

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


更新
截图:

enter image description here

2 个答案:

答案 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对象或构造它的必要数据。