2012-06-27 7 views
7

मैं इस तरह एक पुनरावर्ती मॉडल से एक फ़ॉर्म बनाएं ठीक है, मेरे पेड़ प्रस्तुत हुई है, लेकिन मैं पेड़ की प्रत्येक पंक्ति पर एक पाठ बॉक्स जोड़ने की जरूरत है और मैं इस तरह इनपुट नाम करने के लिए करना चाहते हैं:एक पुनरावर्ती मॉडल

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

तो मेरा मॉडल बाइंडिंग अपेक्षित के रूप में काम करेगा।

क्या यह प्राप्त करने के लिए EditorTemplates या किसी और चीज का उपयोग करके कोई तरीका है?

मैं सबमिट सबमिट पर जावास्क्रिप्ट में इनपुट नामों से बचने के लिए चाहता हूं।

+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

यह ए 1 काम करता है! सहायता के लिए धन्यवाद! –

+0

@ डारिन हम इस संरचना में गतिशील रूप से नोड कैसे जोड़ सकते हैं? ताकि जब हम सर्वर डेटा डिफॉल्ट मॉडल बाइंडर मैप डेटा को अपने सही स्थान पर फॉर्म डेटा पोस्ट करते हैं तो – gaurav

+0

मेरे पास एक ही समस्या थी: एक रिकर्सिव ऑब्जेक्ट मुझे EditorTemplate में "स्टैक खाली" अपवाद दे रहा था। इसके बाद मैंने इस प्रश्न में इस सटीक 'नोड' कोड और आपके सुझाए गए संपादक टेम्पलेट के साथ उदाहरण की कोशिश की। यह अभी भी मेरे लिए काम नहीं करता है। मुझे वही "स्टैक खाली" अपवाद मिलता है। – davidXYZ