我有一个ClassA模型,它的属性是ClassB数组。
public class ClassA
{
public string ClassAProperty1 { get; set; }
public string ClassAProperty2 { get; set; }
public ClassB[] MySubCollection { get; set; }
}
public class ClassB
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
我想在表格中编辑ClassB的实例。我为ClassB创建了一个EditorTemplate,用于创建表格行。
@model ClassB
<tr>
<td>@Html.TextBoxFor(m => m.Prop1)</td>
<td>@Html.TextBoxFor(m => m.Prop2)</td>
</tr>
这在ClassA的编辑视图中效果很好,因为MVC会完成所有字段索引魔术本身:
@Html.TextBoxFor(m => m.ClassAProperty1)
@Html.TextBoxFor(m => m.ClassAProperty2)
<table>
<tr>
<th>Col</th>
<th>Col</th>
</tr>
@Html.EditorFor(m => m.MySubCollection)
</table>
但是,我真的想为包含表格标签的数组创建一个编辑器模板,如下所示:
@model ClassB[]
<table>
<tr>
<th>Col</th>
<th>Col</th>
</tr>
@foreach(var item in Model)
{
@Html.EditorFor(m => item)
}
</table>
所以我可以这样做:
@Html.TextBoxFor(m => m.ClassAProperty1)
@Html.TextBoxFor(m => m.ClassAProperty2)
@Html.EditorFor(m => m.MySubCollection)
但是,此方法不应用字段索引。有没有办法我可以自己完成这个而不必自己构建文本框名称?作为模板,我在使用时不知道属性名称。
答案 0 :(得分:5)
我明白了。剃刀非常聪明。使用for循环而不是foreach解决它:
@for (var i = 0; i < Model.Length; i++)
{
@Html.EditorFor(c => Model[i])
}