2016-09-30 48 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 = "" }) 
相关问题