2012-02-22 4 views
2

MVC 주위에 내 머리 오늘 오기 및보기에 직접 모델을 통과하지 않는 가장 좋은 방법을 가로 질러 달렸다. 대신 ViewModel을 사용하십시오. 뷰 모델에 IEnumerable을 <Object> 전달 - 개체의 ViewModel해야합니까?

나는 각각의 모델에 내 ViewModels를 매핑을 사용하여 AutoMapper 계획을 연구. AutoMapper는 소스와 목적지가 매핑되어있는 한 별도의 매핑없이 IEnumerable을 IEnumerable에 매핑 할만큼 똑똑하다는 것을 알고 있습니다.

는하지만 내보기에 내 뷰 모델에 IEnumerable을 통과 처리하는 방법에 대해 조금 혼란 스러워요. 현재 IEnumerable을 포함하는 ViewModel을 사용하여 페이지를 작업하고 있지만보기에 IEnumerable을 직접 전달하는 것만 큼 나쁘다는 것을 읽습니다. 그렇다면 기본 ViewModel의 IEnumerable 속성에 사용될 개체를 보유하기 위해 별도의 ViewModel이 필요합니까?

그래서 활동은 문제의 모델입니다 :

public class ActivityHistoryViewModel 
{ 
    public IEnumerable<Activity> activities { get; set; } 
} 

내가 ActivityViewModel를 작성하고이 같은 내 ActivityHistoryViewModel를 작성해야 할은?

public class ActivityHistoryViewModel 
{ 
    public IEnumerable<ActivityViewModel> activities { get; set; } 
} 

더 쉬운 방법이 있나요?

답변

1

는 네, 맞습니다. 목록 모델에 필요한 데이터 만한다 가정하면, 당신은 정말 ActivityHistoryViewModel 필요하지 않습니다 및 뷰는 다음과 같은 입력 할 수 있습니다 :

Mapper.CreateMap<Activity, ActivityViewModel>(); 
:

@model IEnumerable<ActivityViewModel> 

당신의 자동차 매퍼 설정은 다음과 같을 것

IEnumerable<Activity> data = GetActivities(); 
var model = Mapper.Map<IEnumerable<Activity>, IEnumerable<ActivityViewModel>>(data); 
return View(model); 

을 그리고 당신은 ActivityViewModel를 정의 할 때 당신은 속성-에 대한 재산권 중복 유형을 만들 수 있습니다, 또는 초과 DAT를 잘라 :

이 같은지도 것 당신은 (제 경우에는 "생성 된 날짜"와 같은 것이 될 것입니다. 그것은 생성 된 db이며 사용자에게는 중요하지 않습니다).

또는은 그냥 목록보다 더 함께 통과 ActivityHistoryViewModel을 고수 할 경우 :

보기 유형 :

@model ActivityHistoryViewModel 

매핑 설정이 같은 동일

지도 남아있을 수 :

IEnumerable<Activity> data = GetActivities(); 
var model = new ActivityHistoryViewModel() { 
    someOtherProperty = "hello world!", 
    activities = Mapper.Map<IEnumerable<Activity>, IEnumerable<ActivityViewModel>>(data) 
}; 
return View(model); 
+0

뜨아는 'didn를 IEnumerable 을 전달한다고 생각할 수도 있습니다. 그러나 저는 실제로 추가 데이터를 전달해야하는 더 큰 시나리오를 생각하고있었습니다. –

+0

대신'ActivityHistoryViewModel'을 사용하는 코드를 추가했습니다. 희망을 당신이 찾고있는. –

+0

굉장한, 중첩 된 엔티티 개체의 속성에 대한 사용자 지정 매핑을 포함하여 모든 작업을 처리 할 수있었습니다. 도와 주셔서 감사합니다. 일단 당신이 그것을 파악하면 항상 쉽게됩니다. :) –