在模型优先方法上使用分页列表?

问题描述 投票:0回答:2

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

谢谢

visual-studio-2010 asp.net-mvc-3 pagination controller pagedlist
2个回答
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); }
   }
}

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


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}))
© www.soinside.com 2019 - 2024. All rights reserved.