我想使用分页列表在我的视图中分页数据,我之前使用网格做了这个,但我发现使用模型第一种方法很难做到这一点。任何帮助都会非常感激。
由于
答案 0 :(得分:0)
他将产品控制器(列出产品页面)描述为:
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}))