带模板的Asp.Net MVC EditorFor Array

Jas*_*era 0 c# asp.net asp.net-mvc mvc-editor-templates razor

我有一个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; }
}
Run Code Online (Sandbox Code Playgroud)

我想在表格中编辑ClassB的实例.我为ClassB创建了一个EditorTemplate,用于创建表格行.

    @model ClassB
    <tr>
        <td>@Html.TextBoxFor(m => m.Prop1)</td>
        <td>@Html.TextBoxFor(m => m.Prop2)</td>
    </tr>
Run Code Online (Sandbox Code Playgroud)

这对于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>
Run Code Online (Sandbox Code Playgroud)

但是,我实际上想为包含表标记的数组创建一个编辑器模板,如下所示:

@model ClassB[]
<table>
    <tr>
        <th>Col</th>
        <th>Col</th>
    </tr>
   @foreach(var item in Model)
   {
       @Html.EditorFor(m => item)
   }
</table>
Run Code Online (Sandbox Code Playgroud)

所以我可以这样做:

@Html.TextBoxFor(m => m.ClassAProperty1)
@Html.TextBoxFor(m => m.ClassAProperty2)
@Html.EditorFor(m => m.MySubCollection)
Run Code Online (Sandbox Code Playgroud)

但是,此方法不应用字段索引.有没有办法我可以自己完成这个而不必自己构建文本框名称?作为模板,我不知道使用时的属性名称.

Jas*_*era 5

我想到了.剃刀非常聪明.使用for循环而不是foreach解决它:

@for (var i = 0; i < Model.Length; i++)
{
    @Html.EditorFor(c => Model[i])
}
Run Code Online (Sandbox Code Playgroud)