2013-04-16 6 views
5

में कई DropDownListFor बनाएं, मैं ड्रॉपडाउनलिस्ट को सूची से गतिशील रूप से बनाना चाहता हूं, जो चयनसूची और चयन को सहेजने के लिए एक फ़ील्ड प्रदान करता है।फोरच-लूप

public class ViewModel 
{ 
    public List<Material_Select> materialSelect { get; set; } 
} 

public class Material_Select 
{ 
    public SelectList selectList { get; set; } 
    public int MaterialId { get; set; } 
} 

दृश्य में, मैं सामग्री के माध्यम से लूप करना चाहता हूं सूची चुनें और ड्रॉपडाउनलिस्ट को गतिशील रूप से बनाएं।

कुछ इस तरह:

int count = 0; 
foreach (var item in Model.materialSelect) 
{ 
    count++; 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.materialSelect) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(item.MaterialId, item.selectList) 
    </div>  
} 

HttpPost ActionResult मैं चयनित मूल्यों को प्राप्त करने की आवश्यकता है। क्या किसी को यह पता है कि इसे कैसे हल किया जाए?

+0

आप संग्रह के लिए फॉर्म नियंत्रण उत्पन्न करने के लिए 'foreach' लूप का उपयोग नहीं कर सकते - देखें [यह उत्तर] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943 # 300 9 4 9 43) एक स्पष्टीकरण के लिए) –

उत्तर

6

आप शायद EditorTemplates का उपयोग कर किया जाना चाहिए। ये आपको उत्कृष्टता से करने की अनुमति देते हैं जो आप वर्णन कर रहे हैं। आप में एक जोरदार टाइप आंशिक दृश्य बनाते हैं ~/दृश्य/साझा/EditorTemplates/Material_Select.cshtml (देखें मॉडल के रूप में एक ही नाम से किया गया है) कि तरह लग रहा है:

@model Material_Select 

<div class="editor-label"> 
    @Html.LabelFor(m => m.MaterialId) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(m => m.MaterialId, Model.selectList) 
</div> 
फिर अपने समग्र रूप में

आप बस कॉल कर सकते हैं:

@Html.EditorFor(m => m.materialSelect) 

जो आपके संग्रह को स्वचालित रूप से गणना करेगा और संग्रह में प्रत्येक आइटम के लिए संपादक टेम्पलेट प्रस्तुत करेगा।

+1

जादू की तरह है :) – float

5

0 में मान लिया जाये कि गिनती शुरू, और अपनी कार्रवाई के बाद विधि प्रकार ViewModel की एक पैरामीटर प्राप्त करते हैं, आप प्रत्येक लटकती के लिए बाँध के लिए इस कोशिश कर सकते हैं MaterialId:

foreach (var item in Model.materialSelect) 
{ 
    count++; 
    <div class="editor-label"> 
     Name for de dropdown 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("materialSelect[" + count + "].MaterialId ", item.selectList) 
     @Html.ValidationMessageFor(model => model.gradationId) 
    </div>  
} 
+0

धन्यवाद! मैंने आपके जवाब में बदलाव किए हैं। @Ian Routledge से उत्तर बेहतर फिट बैठता है क्योंकि यह मूल एमवीसी तकनीकों का उपयोग करता है। – float