为什么我的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返回为空。

谁能告诉我为什么会这样,我该如何补救?

为什么我的MultiSelectList不返回数据模型

您的代码看起来很好。这不起作用的唯一原因是因为SELECT元素的选项值不是数字类型(例如:Guid/String)。在这种情况下,模型绑定器将无法将非数值数组绑定到int数组类型(这是您的SelectedRoles属性的类型)。

解决方案是将SelectedRoles的类型更改为Role实体中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 = "" })