2011-04-18 5 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) { ... } 

もちろん、2番目のケースでは、ビューから送信されたものだけがSelectedUserIdsのプロパティに表示されます。同じビューを再表示する必要がある場合(例えば、モデルエラーのため)、永続化されないため、モデルのコレクションプロパティーにUsersの再作成が必要になります。

関連する問題