2012-01-15 10 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

+0

@NoPyGod, 기본적으로 AutoMapper는 소스 유형 외에'currentPage'와'pageSize'에 대해 알고 싶습니까? AutoMapper는 그런 식으로 사용하기위한 것이 아닙니다. 단일 소스 유형과 단일 대상 유형을 맵핑합니다. –

+0

흠 좋은 점 :) – NoPyGod

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

+0

고마워, @ regisbsb, 나는 (자신을 테스트하지는 않지만) 대답을 업데이 트했습니다. – Alvis

+0

Mapper.Map >을 Mapper.Map >으로 업데이트해야합니다. 반환 유형이 Automapper에 있고 통합이 추측됩니다. – regisbsb

관련 문제