MVC5级联EditorFor在一个集合中

时间:2014-09-17 16:24:47

标签: c# asp.net-mvc

给定一个返回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移动到主视图中,它可以正常工作 是否无法从编辑器模板中获得相同的行为?

1 个答案:

答案 0 :(得分:0)

您可以为模型的每个属性迭代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);
}