为什么我的 MultiSelectList 没有向模型返回数据?
Why is my MultiSelectList not returning data to model?
我有以下视图模型:
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 returns 为 null。
谁能告诉我为什么会这样,我该如何补救?
您的代码看起来不错。这不起作用的唯一原因是 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 = "" })
我有以下视图模型:
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 returns 为 null。
谁能告诉我为什么会这样,我该如何补救?
您的代码看起来不错。这不起作用的唯一原因是 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 = "" })