[英]Unable to apply paging in mvc4 when using viewmodel and actionlink
[英]Trying to paging with ViewModel in MVC4
我不想从数据库中获取所有项目并将它们转换为特定的视图模型,然后使用 PagedList 库来分页所有这些数据。
例如,我想在一个页面上获取 20 个项目,但我不明白什么时候应该将我的模型转换为 viewmodel ?
这是方法
public ViewResult Index(ProductReviewRelationalFilterViewModel filterViewModel)
{
var items =
_productreviewService.GetItems(filterViewModel.ProductId, filterViewModel.UserId)
.Select(AutoMapper.Mapper.Map<ProductReviewListViewModel>);
var result = items.ToPagedList(filterViewModel.PageIndex, 20);
return View(result );
}
此方法获取所有项目,然后将它们转换为 ProductReviewListViewModel,然后对其进行分页。
我想要的是只从 db 获取20 个项目并获得与上述相同的结果?
注意:GetItems 方法返回 IQueryable
添加的解决方案
我做了 GetItems 方法,还返回总项目数作为 out int 参数。 在控制器操作中,我使用 StaticPagedList 方法像 这个链接说的那样手动创建分页
我还没有测试以下内容,但会对此产生影响:
public ViewResult Index(ProductReviewRelationalFilterViewModel filterViewModel)
{
var pageSize = 20;
var skipRecords = (filterViewModel.PageIndex > 1 ? (filterViewModel.PageIndex - 1) * pageSize + (filterViewModel.PageIndex - 2) : 0);
var items =
_productreviewService.GetItems(filterViewModel.ProductId, filterViewModel.UserId)
.Skip(skipRecords).Take(pageSize)
.Select(AutoMapper.Mapper.Map<ProductReviewListViewModel>);
var result = items.ToPagedList(filterViewModel.PageIndex, 20);
return View(result );
}
公式:(pageIndex > 1 ? (pageIndex - 1) * pageSize + (pageIndex - 2) : 0)
page 1 = 0 = skip 0 take 20
page 2 = (2 - 1) 1 * 20 + (2 - 2) 0 = skip 20 take 20
page 3 = (3 - 1) 2 * 20 + (3 - 2) 1 = skip 41 take 20
page 4 = (4 - 1) 3 * 20 + (4 - 2) 2 = skip 62 take 20
page 5 = (5 - 1) 4 * 20 + (5 - 2) 3 = skip 83 take 20
Results:
page 1 - skip 0 take 20 (shows record 0 - 20)
page 2 - skip 20 take 20 (shows record 21 - 41)
page 3 - skip 41 take 20 (shows record 42 - 62)
page 4 - skip 62 take 20 (shows record 63 - 83)
因为它是一个 IQueryable,这意味着您应该使用 Take() 和 Skip() 从结果集中获取记录,所以它只会在您调用 .ToPagedList 时执行查询。
上面的一个警告是,我不确定 ToPagedList() 实现是什么样的,我假设您需要告诉它与您的查询匹配的总记录,以便它可以计算要输出的页面链接数.
你有几个选择,比如使用 Jquery 或 Angular.js 或者你可以使用这个例子
虽然我在我的项目中使用了这个简单的代码并且它工作正常:
tblNews.Skip((PageIndex * CountPerPage) - CountPerPage).Take(CountPerPage).ToList()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.