2011-04-18 2 views
1

보기 데이터를 반환하지 않습니다. 내보기는 사용자를 수신하지만 컨트롤러로 다시 보내지 않습니다. 내가 뭘 놓치고 있니?MultiSelectList 내가 사용자의 목록을 컨트롤러로 보내 내보기에서 다중 선택 목록이

내 컨트롤러는 내보기에서

 // GET: 
    public ActionResult Create(User user) 
    { 
     ViewModel model = new ViewModel(); 

     Interaction interact = new Interaction(); 

     model.Users= Repository.GetUsers(); 
     model.Interacao = interact; 

     return View(model); 
    } 

, 목록 상자입니다 : 내가 잘못 곳

@Html.ListBoxFor(model => model.Users, new MultiSelectList(Model.Users, "Id", "Name")) 

사람이 말해 줄래? 이 목록을 나타냅니다으로

답변

4

당신은 첫 번째 인수로 model.Users 바인딩 할 수 없습니다.

예 :

public class MyViewModel 
{ 
    pubilc string[] SelectedUserIds { get; set; } 
    public IEnumerable<UserViewModel> Users { get; set; } 
} 

public class UserViewModel 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

다음 :

@Html.ListBoxFor( 
    model => model.SelectedUserIds, 
    new MultiSelectList(Model.Users, "Id", "Name") 
) 

성공적으로 바인딩 :

첫번째 인자는 선택된 값들을 포함 할 문자열/정수 배열 될 필요
[HttpPost] 
public ActionResult Index(string[] selectedUserIds) { ... } 

또는 :

[HttpPost] 
public ActionResult Index(MyViewModel model) { ... } 

물론 두 번째 경우에는 SelectedUserIds 속성 만 채워집니다 (보기에서 보낸 유일한 속성이기 때문에). 당신이 (예를 들어 오류를 모델로 인해) 같은 뷰를 다시 표시해야 할 경우 그것이 지속되지 않습니다으로 VIE 모델의 Users 컬렉션 속성을 다시 채울 필요가있을 것이다.

관련 문제