Automapper和MvcPager3一起工作

时间:2012-01-15 21:57:29

标签: c# asp.net-mvc-3 entity-framework

我想使用MvcPager3将分页添加到我的一个视图中。这很简单,只是我已经使用AutoMapper将我的模型映射到一个简化的视图模型。

        List<Call> calls = (from p in db.Calls orderby p.ID descending select p).ToList();

        var viewModel = new List<CallListItem>();

        Mapper.Map(calls, viewModel);

        return View(viewModel);

我认为这可能就像更换这一行一样简单

var viewModel = new List<CallListItem>();

用这个

var viewModel = new PagedList<CallListItem>();

但是PagedList有一个构造函数,它接受一个项目列表。因为automapper将为我做这个,我以为我可以传递null,但它不起作用。

任何人都有使用这两个组件的经验吗?

由于

编辑:

找到一个名为PagedList的MvcPager替代品。它更好,因为它有一个StaticPagedList类,您可以将其用于已经被分页的数据。

2 个答案:

答案 0 :(得分:3)

您可以在映射后对视图模型进行分页:

var calls = (from p in db.Calls orderby p.ID descending select p).ToList();
var viewModel = Mapper
    .Map<IEnumerable<Call>, IEnumerable<CallListItem>>(calls)
    .ToPagedList(currentPage, pageSize);
return View(viewModel);

答案 1 :(得分:1)

或者,您可以先使用StaticPagedList进行分页,然后进行映射。 这对我有用:

var calls = (from p in db.Calls orderby p.ID descending select p).ToPagedList();
var viewModel = Mapper.Map<IEnumerable<CallListItem>>(calls);
return new StaticPagedList<CallListItem>(viewModel, calls);

我之所以这样做,是因为我不想列出所有对象以便稍后翻页。

基于这个不错的post