为什么我的MultiSelectList不返回数据模型
本文关键字:返回 数据模型 MultiSelectList 我的 为什么 | 更新日期: 2023-09-27 18:09:54
我有以下视图模型:
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 in的表单被张贴时,SelectedRoles返回为空。
谁能告诉我为什么会这样,我该如何补救?
您的代码看起来很好。这不起作用的唯一原因是因为SELECT元素的选项值不是数字类型(例如:Guid
/String
)。在这种情况下,模型绑定器将无法将非数值数组绑定到int数组类型(这是您的SelectedRoles
属性的类型)。
解决方案是将SelectedRoles
的类型更改为Role
实体中Id
属性类型的类型集合。
假设您的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 = "" })