2011-04-18 32 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集合屬性,因爲它不會被持久化。