由于MultiSelectList无法将IEnumerable <selectlistitem>转换为字符串</selectlistitem>,因此Model.State无效

时间:2013-12-06 17:22:14

标签: c# asp.net-mvc html-helper

所以我有2个ListBox控件,一个填充了选项,另一个是空的。关键是当我提交表单时,我可以看到他们从第二个ListBox中选择了哪些值。但是当帖子发布时,模型状态对于以下值之一的此错误无效:

{“从'System.String'类型到'System.Web.Mvc.SelectListItem'类型的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。”} 那个

HTML:

@Html.ListBoxFor( x => x.RolesAvailable, new MultiSelectList(Model.RolesAvailable, "Value", "Text", Model.RolesAvailable),
                 new {Multiple = "multiple"}
            )  

@Html.ListBoxFor( x => x.RolesSelected, new MultiSelectList(Model.RolesSelected, "Value", "Text", Model.RolesSelected),
                                       new { Multiple = "multiple" }
            ) 

模型:

    public IEnumerable<SelectListItem> RolesAvailable { get; set; }

    public IEnumerable<SelectListItem> RolesSelected { get; set; }

controller(avm是我的viewmodel):

            List<SelectListItem> sRoles = new List<SelectListItem>();
            foreach (SelectListItem SI in avm.RoleListItems)
            {
                sRoles.Add(SI);
            }

            avm.RolesAvailable = sRoles;

            List<SelectListItem> items = new List<SelectListItem>();
            avm.RolesSelected = items;

1 个答案:

答案 0 :(得分:2)

当您编写@Html.ListBoxFor( x => x.RolesSelected ...时,表示RolesSelected包含所选值,这些选定值是与Value属性相同类型的集合。如果您的选项的值是整数,则用于@Html.ListBoxFor( x => x.MySelectedValues的集合...必须是IEnumerable<int>

您应该在视图模型中创建两个单独的集合:IEnumerable<SelectListItem>用于构建ListBox,IEnumerable<*MyValueType*>用于获取所选值,如果Value属性为值类型或字符串。

此外,新MultiSelectList中使用的第4个参数也是所选值的集合:

@Html.ListBoxFor(x => x.SelectedRoles, 
                 new MultiSelectList(Model.RolesAvailable, "Value", "Text", Model.SelectedRoles),
                 new {Multiple = "multiple"})