2013-05-14 2 views
2

MVC 프로젝트에서 AutoMapper를 배우기 시작했습니다. 성별 ("M"또는 "F"의 가능한 값)에 대한 문자열 필드가있는 기본 엔터티 "참석자"가 있습니다.Automapper - 문자열 속성을 SelectList로 변환 하시겠습니까?

이미 내 참석자와 내 AttendeeEditView 개체간에 기본 매핑이 만들어졌습니다. 내가하고 싶은 일은 모델 측의 "M"또는 "F"성별 문자열을 ViewModel 측의 SelectList로 변환하고 목록에서 적절한 값을 선택합니다.

public class GenderMenuResolver : ValueResolver<Attendee, SelectList> { 
    protected override SelectList ResolveCore(Attendee source) { 
     List<object> items = new List<object>(){ 
      new{ Value = "F" , Text = "Female" }, 
      new{ Value = "M" , Text = "Male" } 
     }; 

     string Gender = source.Gender ?? ""; 
     string selectedValue = new List<string>() { "M", "F" }.Contains(Gender.ToUpper()) ? Gender.ToUpper() : ""; 

     SelectList GenderMenu = new SelectList(
      items, 
      "Value", 
      "Text", 
      selectedValue 
     ); 

     return GenderMenu; 
    } 
} 

그리고 내 매핑 코드 :

나는 내가 ValueResolver이 작업을 수행 할 필요가 있다고 생각 ... 여기에 내가 쓴 무엇

Mapper.CreateMap<Attendee, AttendeeEditView>() 
.ForMember(dest => dest.Gender, opt => opt.ResolveUsing<GenderMenuResolver>()); 


List<AttendeeEditView> ViewModel = Mapper.Map<List<AttendeeEditView>>(Attendees); 

이 코드가 실행을 볼 수 있습니다를 단계별로 적절한 선택 목록을 출력합니다. 그러나 다음과 같은 오류 메시지가 나타납니다.

먼저 ".Gender.Gender"매핑이 올바르지 않은 것 같습니다.

그러나 근본 문제로 보이는 것을 ... 내부 예외 메시지는이 계시 :

"Type 'System.Web.Mvc.SelectList' does not have a default constructor"

사람이 나를 내가 잘못, 혹은 더 나은 접근 방식은 내가 사용되어야 하는지를 확인하는 데 도움이 수 있습니까? 감사.

답변

12

나는 이것이 당신이 필요 이상으로 어렵게 만들고 있다고 생각합니다. 모든 것이 매핑 될 필요는 없습니다. 실제로는 SelectList 같은 것들은 모델이 아닌 뷰 모델에만 관련이 있기 때문에 매핑되지 않아야합니다.

Gender 매핑 될
public string Gender { get; set; } 

public SelectList GenderChoices 
{ 
    get 
    { 
     return new SelectList(new List<SelectListItem> 
      { 
       new SelectListItem { Value = "M", Text = "Male" }, 
       new SelectListItem { Value = "F", Text = "Female" } 
      }, "Value", "Text", Gender); 
    } 
} 

하지만 GenderChoices 그냥보기 모델에 존재하는 것 :

그래서보기 모델 단지 그런 짓을.

그런 다음보기에서 : 좋아요

@Html.DropDownListFor(m => m.Gender, Model.GenderChoices) 
+0

... 나는 또한 ViewModels를 사용하는 비교적 새로운 해요, 그래서 통찰력을 주셔서 감사합니다. 나는 이것을 시도 할 것이다. –

관련 문제