所以我有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;
答案 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"})