您好我正在尝试从模型中绑定MVC中的下拉列表。
这是我的模特
[Table("FileConfig")]
public class FileConfigModel
{
[Key]
[Display(Name = "File Congif ID")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FileConfigId { get; set; }
....
[Display(Name = "Description")]
public string Description { get; set; }
}
这是我在控制器中的getall方法:
public List<FileConfigModel> GetAll()
{
return db.FileConfigModels.ToList();
}
然后我从另一个控制器中调用它
public ActionResult Create()
{
var fileConfigListEntries = new FileConfigController().GetAll()
.Select(fc => new SelectListItem
{
Value = fc.FileConfigId.ToString(),
Text = fc.Description,
Selected = false
});
ViewBag.FileConfigEntires = fileConfigListEntries;
return View();
}
以下是我的观点:
@Html.LabelFor(model => model.FileConfigId, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.FileConfigId, ViewBag.FileConfigEntires as SelectList, "-Select File Config")
@Html.ValidationMessageFor(model => model.FileConfigId)
</div>
然而,我一直在收到错误说
&#34;没有类型&#39; IEnumerable&#39;的ViewData项目。具有密钥&#39; FileConfigId&#39; ..&#34;
有人可以帮助我,告诉我我错过了什么。
答案 0 :(得分:0)
上述错误的可能原因可能是变量fileConfigListEntries为null或者没有从dbcontext获取数据。 由于下拉列表以null或集合为界,没有元素错误,因为“没有类型'IEnumerable'的ViewData项具有键'FileConfigId'..” 我建议用硬编码数据替换fileConfigListEntries视图包数据,看看错误消失。
答案 1 :(得分:0)
您对fileConfigListEntries
的查询(即..Select(fc => new SelectListItem{ .. }
)会返回IEnumerable<SelectListItem>
在视图中,您可以尝试使用SelectList
ViewBag.FileConfigEntires as SelectList
类型
SelectList
IEnumerable<SelectListItem>
,但IEnumerable<SelectListItem>
不是 SelectList
,因此转换失败, DropDownListFor()
的第二个参数是null
。当第二个参数为null
时,该方法期望第一个参数为IEnumerable<SelectListItem>
,而不是它,因此是例外。
将您的代码更改为
@Html.DropDownListFor(m => m.FileConfigId, ViewBag.FileConfigEntires as IEnumerable<SelectListItem>, ... )
或
@Html.DropDownListFor(model => model.FileConfigId, (IEnumerable<SelectListItem>)ViewBag.FileConfigEntires, ... )
旁注在Selected = false
子句中没有设置.Select
- 默认情况下为false
,但无论如何,在绑定到模型属性时忽略它(它的值确定所选内容的属性