ListBoxFor类型错误没有意义

时间:2017-08-04 16:23:59

标签: c# asp.net-mvc

我收到一个没有意义的类型错误:

  

具有键' 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永远不会发布,因此在验证失败后永远不会发回。

1 个答案:

答案 0 :(得分:0)

正常导致该错误导致ViewBag成员与您绑定到的模型属性(在此方案中为ViewBag.OptionIds)的名称相同选择清单。

您发布的代码中没有出现这种情况,但我怀疑它实际上是您忽略发布的代码。查找正在设置的ViewBag.OptionIds(不区分大小写,即optionIdsOPTIONIDS等所有内容都被查看)的任意位置,并将其删除。