2017-08-04 49 views
-1

我得到一个类型的错误是没有意义的:ListBoxFor类型的错误是没有意义的

具有关键的ViewData的项目“OptionIds”的类型为“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

什么通常导致的错误是设置具有相同的名称作为模型属性要绑定到(ViewBag.OptionIds,在这种情况下)与你的选择列表中ViewBag成员。

这不会发生在您发布的代码中,但我怀疑它实际上是在您忽略发布的代码中。查找ViewBag.OptionIds(区分大小写,即optionIds,OPTIONIDS等等都被视为相同)的任何地方正在设置,并将其删除。