2016-09-30 4 views
0

나는 다음보기 모델이 있습니다왜 내 MultiSelectList가 데이터를 모델로 반환하지 않습니까?

public class SendGroupEmailViewModel 
{ 
    public int EmailID { get; set; } 
    public IEnumerable<SelectListItem> Roles { get; set; } 
    public int[] SelectedRoles { get; set; } 

} 

보기에 적절한 정보를 전송 컨트롤러 조치 : 내보기에 그런

var viewModel = new SendGroupEmailViewModel 
     { 
      Roles = db.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Id.ToString(), Text = rr.Name }).ToList(), 

     }; 

가 :

@Html.ListBoxFor(model => model.SelectedRoles, new MultiSelectList(Model.Roles, "Value", "Text"), new { @class = "" }) 

목록이 나타납니다 보기 내에 있지만 위의 ListBoxFor in이있는 양식이 SelectedRoles에 게시되면 null로 반환됩니다.

누구나 이것이 왜 내가 어떻게 해결할 수 있는지 말해 줄 수 있습니까?

+1

역할 엔터티의 Id 속성 유형은 무엇입니까? – Shyju

+0

문자열입니다. 내 문제를 지적 해 주셔서 대단히 감사합니다. 꽤 바보 같아요! 편집 - 그건 분명히 내 문제를 해결. – Rob

답변

1

코드가 정상적으로 보입니다. 이것이 작동하지 않는 유일한 이유는 SELECT 요소의 옵션 값이 숫자 유형 (EX : Guid/String)이 아니기 때문입니다. 이 경우 모델 바인더는 비 숫자 값 배열을 int 배열 유형 (SelectedRoles 속성 유형)에 바인딩 할 수 없습니다.

SelectedRoles 유형을 Id 속성의 유형 인 Role 엔티티 유형으로 변경하는 것이 해결책입니다.

당신의 Role.Idstring 유형 인 가정이

public class SendGroupEmailViewModel 
{ 
    public int EmailID { get; set; } 
    public IEnumerable<SelectListItem> Roles { get; set; } 
    public string [] SelectedRoles { get; set; } 
} 

은 또 다시보기에 MultiSelectList의 객체를 만들 필요가 없습니다 문제를 해결해야한다. 당신은 간단히 할 수 있습니다

@Html.ListBoxFor(model => model.SelectedRoles, Model.Roles, new { @class = "" }) 
관련 문제