为什么我的 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 = "" })