模型绑定到列表EditorFor编译错误

时间:2013-10-18 12:42:19

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

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

我正在尝试绑定到viewmodel中的可映射或icollection。我的语法错了吗?是否有一种新方法可以做我错过的事情。

@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

2 个答案:

答案 0 :(得分:3)

  

我的语法错了吗?

是的,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)
}

答案 1 :(得分:0)

在这种情况下,框架非常智能,如果你为模型Trace创建了自己的EditorTemplate,那么你实际上可以只写

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

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