我有以下视图模型:
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返回null。
任何人都可以告诉我为什么会这样,以及如何补救它?
答案 0 :(得分:1)
您的代码看起来很好。这不会起作用的唯一原因是因为SELECT元素的选项值不是数字类型(EX:Guid
/ String
)。在这种情况下,模型绑定器将无法将非数值值数组绑定到int数组类型(这是SelectedRoles
属性的类型)。
解决方案是将SelectedRoles
的类型更改为类型集合,该集合是Id
实体中Role
属性的类型。
假设您的Role.Id
属于string
类型,这应解决问题
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 = "" })