2016-09-30 47 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的表單被張貼時SelectedRoles返回爲空。

誰能告訴我爲什麼這是,我該如何補救它?

+1

什麼是角色實體中的Id屬性的類型? – Shyju

+0

這是一個字符串,非常感謝您指出我的問題,我感覺非常愚蠢!編輯 - 這顯然解決了我的問題。 – Rob

回答

1

你的代碼看起來很好。這個不起作用的唯一原因是因爲SELECT元素的選項值不是數值類型(EX:Guid/String)。在這種情況下,模型聯編程序將無法將非數值數組綁定到int數組類型(這是您的SelectedRoles屬性的類型)。

解決的辦法是將SelectedRoles的類型更改爲實體中Id屬性的類型的集合。

假設你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 = "" }) 
相關問題