我在这里尝试做的事情似乎很常见,但我无法运行此代码。我收到编译错误。
我正在尝试绑定到视图模型中的 ienumerable 或 icollection。我的语法有误吗?有没有我错过的新做事方式。
@for(var i=0; i < Model.traces.Count(); ++i)
{
@Html.EditorFor(x => x.traces[i].status)
}
我的架构细节在我的上一篇文章中,导致这个......
使用实体框架在 POST 上出错 - 值不能为空。参数名称:源
我的语法有误吗?
是的,IEnumerable 或 ICollection 没有索引器:x.traces[i]
。
如果您使用其元素可以通过索引(如 IList<T>
或 T[]
)访问的集合会更好,具体取决于视图模型的具体类型。
然后,您将能够执行此操作:
@model IList<MyViewModel>
...
@for (var i = 0; i < Model.traces.Count; i++)
{
@Html.EditorFor(x => x.traces[i].status)
}
在这种情况下,框架非常聪明,如果你为模型Trace
制作了自己的编辑器模板,你实际上可以只写
@Html.EditorFor(m => m.traces)
MVC 将为列表中的每个项目呈现一个编辑器,并为每个索引提供正确的字段名称。