【问题标题】:ListBoxFor type error makes no sense [duplicate]ListBoxFor 类型错误没有意义[重复]
【发布时间】: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


    【解决方案1】:

    通常导致该错误的原因是使用您的选择列表设置了一个与您绑定到的模型属性(在这种情况下为ViewBag.OptionIds)同名的ViewBag 成员。

    这在您发布的代码中没有发生,但我怀疑它实际上是在您忽略发布的代码中。查找设置了ViewBag.OptionIds(不区分大小写,即optionIdsOPTIONIDS 等)的任何位置,并将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-07
      • 2017-06-14
      • 2016-01-24
      • 1970-01-01
      • 2015-02-15
      • 2017-08-02
      • 2013-04-25
      • 2018-10-26
      相关资源
      最近更新 更多