【问题标题】:Model binding to a list EditorFor compilation error模型绑定到列表 EditorFor 编译错误
【发布时间】:2013-10-18 21:07:44
【问题描述】:

我在这里尝试做的似乎很常见,但我无法运行此代码。我收到编译错误。

我正在尝试绑定到视图模型中的 ienumerable 或 collection。我的语法错了吗?有没有一种新的做事方式我错过了。

@for(var i=0; i < Model.traces.Count(); ++i)
{
    @Html.EditorFor(x => x.traces[i].status)
}

我的架构细节在我之前的一篇文章中导致了这个......

Getting error on POST with Entity Framework - Value cannot be null. Parameter name: source

【问题讨论】:

  • 你检查请求中的post参数了吗?
  • 再次感谢您在之前的帖子中提供的所有帮助 jannagy。这是一个艰难的过程,我很高兴完成!
  • 我很高兴听到它完成了 :)

标签: c# asp.net-mvc entity-framework razor ef-database-first


【解决方案1】:

我的语法错了吗?

是的,IEnumerable 或 ICollection 没有索引器:x.traces[i]

如果您使用一个集合,其元素可以通过索引访问,例如IList&lt;T&gt;T[],那会更好,具体取决于您的视图模型的类型。

那么你就可以这样做了:

@model IList<MyViewModel>
...
@for (var i = 0; i < Model.traces.Count; i++)
{
    @Html.EditorFor(x => x.traces[i].status)
}

【讨论】:

  • 是 - 列表修复了这个问题 - 我最终的剃刀语法是这样的...... @for(var i=0; i
【解决方案2】:

在这种情况下框架是相当聪明的,如果你已经为模型Trace制作了自己的EditorTemplate,你实际上可以写

@Html.EditorFor(m => m.traces)

并且 MVC 将为列表中的每个项目呈现一个编辑器,并为每个索引提供正确的字段名称。

【讨论】:

  • 我已经研究过了,但据我了解,我必须以一种告诉框架如何编写 html 的方式创建模板,这是我失败的部分。你有可以指点我的链接吗?
  • 你能发布Trace类吗?我可以告诉你如何为它制作一个模板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多