Asp.Net MVC 编辑器用于带有模板的数组



我有一个 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; }
}

我想在表中编辑我的 Class B 实例。我已经为 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)

但是,此方法不应用字段索引。有没有办法在不自己构建文本框名称的情况下完成此操作?作为一个模板,我在使用时不知道属性名称。

我想通了。剃刀非常聪明。使用 for 循环而不是 foreach 可以解决它:

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

最新更新