【发布时间】:2017-08-04 16:23:59
【问题描述】:
我收到一个没有意义的类型错误:
具有键 'OptionIds' 的 ViewData 项的类型为 'System.Collections.Generic.List`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'但必须是“IEnumerable<.selectlistitem>”类型。
它要求一个 int 列表,但这不是该方法实际需要的。这是怎么回事?
当下面的列表项OptionList 为空时,我遇到过这种情况,但这次不是这样。
错误发生在帖子上。表单加载正常,但提交导致黄屏死机。我有另一个模型,它在这里使用的所有部件都是相同的,并且工作正常。我在这里扯头发。
CSHTML:
@Html.ListBoxFor(model => model.OptionNames, Model.OptionList, new { @class = "form-control", disabled = "true" })
型号:
public class MyModelEditViewModel
{
public List<int> OptionIds { get; set; }
public IEnumerable<SelectListItem> OptionList { get; set; }
// Empty constructor for EF
public MyModelEditViewModel() { }
// Called from controller with an enumerable from repository
public MyModelEditViewModel(IEnumerable<SelectListItem> optionList)
{
// Not null
OptionList = optionList;
}
}
编辑:看起来罪魁祸首是this 数据注释属性(理论上)可以防止两个列表具有重叠值。当验证失败时(还没有客户端),ViewModel 被发回,但 OptionsList 从未发布,因此在验证失败后永远不会被发回。
【问题讨论】:
标签: c# asp.net-mvc