我收到一个没有意义的类型错误:
具有键' 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
永远不会发布,因此在验证失败后永远不会发回。
答案 0 :(得分:0)
正常导致该错误导致ViewBag
成员与您绑定到的模型属性(在此方案中为ViewBag.OptionIds
)的名称相同选择清单。
您发布的代码中没有出现这种情况,但我怀疑它实际上是您忽略发布的代码。查找正在设置的ViewBag.OptionIds
(不区分大小写,即optionIds
,OPTIONIDS
等所有内容都被查看)的任意位置,并将其删除。