gpt4 book ai didi

c# - 由于 MultiSelectList 无法将 IEnumerable 转换为字符串,Model.State 无效

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:29 24 4
gpt4 key购买 nike

所以我有 2 个 ListBox 控件,一个填充了选项,另一个是空的。关键是当我提交表单时,我可以看到他们从第二个列表框中选择了哪些值。但是当发布时,modelstate 无效并出现以下值之一的错误:

{“从类型‘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 是我的 View 模型):

            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;

最佳答案

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

您应该在您的 View 模型中创建两个单独的集合:一个 IEnumerable<SelectListItem>用于构建您的列表框,以及一个 IEnumerable<*MyValueType*>用于获取您选择的值,如果 Value属性是值类型或字符串。

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

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

关于c# - 由于 MultiSelectList 无法将 IEnumerable<SelectListItem> 转换为字符串,Model.State 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20429896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com