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