0

我想使用分页列表在我的视图中对数据进行分页,我之前使用网络网格进行过此操作,但发现使用模型优先方法很难做到这一点。任何帮助将不胜感激。

谢谢

4

2 回答 2

0

在 github 上查看我的 PagedList nuget 包:

https://github.com/troygoode/pagedlist

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

我的控制器.cs

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

我的路由.cshtml

<ul>
  @foreach(var product in ViewModel){
    <li>@product.Name</li>
  }
</ul>
@Html.PagedListPager(ViewModel, page=> Url.Action("MyRoute", {page = page}))
于 2012-04-16T17:54:08.883 回答
0

Steve Sanderson 在他的书Pro ASP.NET MVC 3中描述了一个分页支持的例子,我强烈推荐这本书(尽管下一个版本发布应该不会太久)。

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

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); }
   }
}

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

于 2012-04-16T13:36:51.140 回答