集合中的MVC5级联EditorFor

本文关键字:级联 EditorFor MVC5 集合 | 更新日期: 2023-09-27 18:22:10

给定一个返回IList<Scope>的控制器方法其中Scope包含一组bool值和一些附加的子对象。

public class Scope
{
    public string Name { get; set; }
    public bool A { get; set; }
    public bool B { get; set; }
    public bool C { get; set; }
    public Investment Item { get; set; }
}

我有一个带有以下标记的主视图:

@model IList<Scope>
<div>
    @Html.EditorForModel("Panel")
</div>

我在EditorTemplates中有一个名为Panel.cshtml的视图,其结构如下:

@model IList<Scope>
@for (int i = 0; i < Model.Count; i++) 
{
    <div class="panel panel-info">
        <div class="panel-heading">
            <p>@Model[i].Name</p>
        </div>
        <div class="panel-body">
            @Html.EditorFor(_ => _[i])
        </div>
    </div>
}

EditorFor(_ => _[i])没有根据其类型为每个字段呈现带有编辑器的标准对象模板?

当从另一个编辑器内部调用EditorFor时,为什么它不为每个属性呈现编辑器?

如果我将Panel.cshtml中的所有标记移到主视图中,那么它就可以正常工作
是否不可能从编辑器模板中获得相同的行为?

集合中的MVC5级联EditorFor

您可以为模型的每个属性迭代EditorFor

@model IList<Scope>
@for (int i = 0; i < Model.Count; i++) 
{
    <div class="panel panel-info">
        <div class="panel-heading">
            <p>@Model[i].Name</p>
        </div>
        <div class="panel-body">
            @Html.EditorFor(_ => Model[i].A)
        </div>
        <div class="panel-body">
            @Html.EditorFor(_ => Model[i].B)
        </div>
        .
        .
        .
    </div>
}

或者,如果你不想为模型的每个属性迭代EditorFor,试试这个:

@foreach (var scope in Model)
{
    @Html.EditorFor(model => scope);
}