MVC Listbox用于模型中的变量

本文关键字:变量 模型 Listbox 用于 MVC | 更新日期: 2023-09-27 18:00:47

我有一个列表框作为

@Html.ListBoxFor(m => m.SelectedDepartment, Model.Departments, 
                 new { @class = "form-control", @style = "height:150px", size = 4,
                 onchange = "DepartmentSelectionChanged(this)" })

在我的型号中

 public IEnumerable<string> SelectedDepartment { get; set; }

然而,在返回视图时,我得到了一个错误作为

System.InvalidOperationException:具有键的ViewData项"SelectedDepartment"的类型为"System.String[]",但必须为"IEnumerable"类型。

怎么了?

我该如何更正?

MVC Listbox用于模型中的变量

具有关键字"SelectedDepartment"的ViewData项的类型为"System"字符串[]',但类型必须为'IEnumerable<SelectListItem'。

问题不在于IEnumerable/string[]的使用,而在于您传递的是一组string对象,而不是SelectListItem对象。

你可以很容易地转换它:

List<SelectListItem> selectlistitems = new List<SelectListItem>();
foreach(string mystring in myarray)
{
    selectlistitems.Add(new SelectListItem() { Text = mystring, Value = mystring };
}
ViewData["SelectedDepartment"] = selectlistitems;

如果你使用LINQ:,它会更短

ViewData["SelectedDepartment"] = 
        myarray.Select(mystring => new SelectListItem() { Text = mystring, Value = mystring })
            .ToList();