2012-06-27 55 views
7

我有一个递归模型这样创建表单好,我的树渲染,但我需要在树的每一行添加一个文本框,我想输入这样的名称:从递归模型

Childs[0].Childs[1].Childs[2].Text 

所以我的模型绑定将按预期工作。

有没有通过使用EditorTemplates或其他任何方式来实现这一目标?

我想避免在表单提交中在javascript中建立输入名称。

+0

您是否尝试过使用模板? –

回答

6

您可以使用尊重当前导航上下文而非@helper的编辑器模板。

所以定义自定义编辑模板为Node型(~/Views/Shared/EditorTemplates/Node.cshtml):

@model Node 
<li> 
    @Html.LabelFor(x => x.Text) 
    @Html.EditorFor(x => x.Text) 
    @if (Model.Childs.Any()) 
    { 
     <ul> 
      @Html.EditorFor(x => x.Childs) 
     </ul> 
    } 
</li> 

,然后里面的一些主要观点:

@model MyViewModel 
<ul> 
    @Html.EditorFor(x => x.Menu) 
</ul> 

其中Menu财产显然是Node型。

+0

它起作用A1!谢谢您的帮助! –

+0

@Darin我们如何在这个结构中动态添加节点?所以当我们将表单数据发布到服务器默认模型绑定器映射数据的正确位置时 – gaurav

+0

我遇到同样的问题:递归对象在EditorTemplate中给我一个“Stack Empty”异常。然后我用这个确切的'节点'代码和你建议的EditorTemplate在这个问题中尝试了这个例子。它仍然不适合我。我得到相同的“Stack Empty”异常。 – davidXYZ