2012-01-15 73 views
3

我想使用MvcPager3将分页添加到我的某个视图中。这很简单,除了我已经使用AutoMapper将我的模型映射到简单的视图模型。Automapper和MvcPager3一起工作

 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 PagedList<CallListItem>(); 

替换该行

var viewModel = new List<CallListItem>(); 

但PagedList有一个构造函数,需要的项目列表一样简单。由于automapper将为我这样做,我想我可能会传递null,但它不起作用。

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

由于

编辑:

实测值到MvcPager替代称为PagedList。它更好,因为它有一个StaticPagedList类,您可以将它用于已经分页的数据。

回答

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); 
+0

谢谢,但有时分页的元素将成为另一个视图模型的成员,例如.. MyViewModel.SomePagedElements,我希望Automapper也能够处理这些情况,而无需人工干预。 – NoPyGod 2012-01-15 22:05:45

+0

@NoPyGod,所以你基本上想让AutoMapper除了源类型之外还知道'currentPage'和'pageSize'? AutoMapper不打算以这种方式使用。它映射单个源类型和单个目标类型。 – 2012-01-15 22:07:21

+0

嗯好点:) – NoPyGod 2012-01-15 22:09:00

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

+0

你不需要GetMetatada。只是通过电话 – regisbsb 2014-05-10 16:16:28

+0

谢谢,@regisbsb,我已经更新了答案(虽然没有自己测试过)。 – Alvis 2014-05-12 11:49:59

+0

我应该更新Mapper.Map > Mapper.Map >,我相信返回类型是在Automapper上,并且传入是被传入的。 – regisbsb 2014-05-13 12:08:44