在模型第一种方法上使用分页列表?

时间:2012-04-16 13:11:51

标签: visual-studio-2010 asp.net-mvc-3 controller paging pagedlist

我想使用分页列表在我的视图中分页数据,我之前使用网格做了这个,但我发现使用模型第一种方法很难做到这一点。任何帮助都会非常感激。

由于

2 个答案:

答案 0 :(得分:0)

史蒂夫·桑德森在他的书Pro ASP.NET MVC 3中描述了一个分页支持的例子,我强烈推荐(尽管在下一个version发布之前不应该很久。)

他将产品控制器(列出产品页面)描述为:

public class ProductController : Controller {
   public int PageSize = 4; //This could be retrieved from the database

   private IProductRepository repository;
   public ProductController(IProductRepository repoParam) {
      repository = repoParam;
   }

   public ViewResult List(int page = 1) {
      ProductsListViewModel viewModel = new ProductsListViewModel {
         Products = repository.Products
            .OrderBy(p => p.ProductID)
            .Skip((page - 1) * PageSize)
            .Take(PageSize),
         PagingInfo = new PagingInfo {
            CurrentPage = page,
            ItemsPerPage = PageSize,
            TotalItems = repository.Products.Count()
         }
      };
   return View(viewModel);
}

对动作的查询可以采用以下形式:

http://localhost:23081/Product/List?page=2

(或您需要的任何路线)。

这个视图模型将是:

public class ProductsListViewModel {
   public IEnumerable<Product> Products { get; set; }
   public PagingInfo PagingInfo { get; set; }
}

PagingInfo模型将是:

public class PagingInfo {
   public int TotalItems { get; set; }
   public int ItemsPerPage { get; set; }
   public int CurrentPage { get; set; }
   public int TotalPages {
      get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
   }
}

然后,您可以根据需要使用此分页信息在视图中显示信息。

答案 1 :(得分:0)

在github上查看我的PagedList nuget包:

https://github.com/troygoode/pagedlist

这将允许您编写如下代码:

MyController.cs

public class MyController : Controller{
  public object MyRoute(){
    var pagedProducts = ProductsRepo.All().ToPagedList();
    return View(pagedProducts);
  }
}

MyRoute.cshtml

<ul>
  @foreach(var product in ViewModel){
    <li>@product.Name</li>
  }
</ul>
@Html.PagedListPager(ViewModel, page=> Url.Action("MyRoute", {page = page}))