【问题标题】:IEnumerable and TextBoxFor() does not work at same time in viewIEnumerable 和 TextBoxFor() 在视图中不能同时工作
【发布时间】:2017-10-07 06:49:41
【问题描述】:

此问题仅在我使用TextBoxFor() 时出现,TextBox() 没有问题:

@model IEnumerable<DataLayer.MobileMgt.Brand>

@Html.TextBoxFor(a => a.Name, new { @class = "form-control"})

TextBoxFor 出现此错误:

类型参数不能从用法中推断出来。尝试明确指定类型参数。

【问题讨论】:

  • 请用您遇到的错误更新您的答案。
  • 最后一行包含错误信息。
  • 您应该修改您的问题以使其更清晰,并粘贴完整的错误消息。
  • 我的建议是改用DisplayForModel模板。

标签: c# entity-framework model-view-controller


【解决方案1】:

您正在传递一个 IEnumerable 类型,您必须在没有 IEnumerable 包装器的情况下传递对象,因为您正试图与对象进行强绑定。匿名类型将被视为您传递的模型。

 @model DataLayer.MobileMgt.Brand

 @Html.TextBoxFor(a => a.Name, new { @class = "form-control"})

如果您想使用 Ienumable 执行此操作,您可以通过如下方式编写 foreach 来执行此操作,但请确保标识符 ID 不重复。

foreach(var item in Model)
{
@Html.TextBoxFor(modelitem => item.Name, new { @class = "form-control"})
}

【讨论】:

  • 我想传递对象列表而不是单个对象,这就是为什么使用 IEnumerable。
  • 你没有关注这个问题。
【解决方案2】:

由于您的模型是IEnumerable,因此您需要遍历它以获取模型数据。你的做法是错误的。

@for (int i = 0; i < Model.Count(); i++)
{
    @Html.TextBoxFor(a => a[i].Name, new { @class = "form-control"})
}

编辑:

@model IEnumerable&lt;DataLayer.MobileMgt.Brand&gt; 更改为@model IList&lt;DataLayer.MobileMgt.Brand&gt;

【讨论】:

  • 我正在使用 foreach 循环来显示列表的对象。那不是我的问题。问题是顶部有 IEnumerable 的视图不能有 textboxfor
  • 你可以在razorview 中用IList 代替IEnumerable
  • 那么可能还有其他问题。问题是无法从IEnumerable 中读取 textboxfor 属性。它仅针对IList 定义。
  • 从我开始 MVC 的那一天起,我就一直面临这个问题。但今天我想问你们。
  • 没有看到一些示例代码,我帮不了你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 2019-06-19
相关资源
最近更新 更多