2011-05-03 13 views
5

मैं Asp.net एमवीसी के लिए एक नौसिखिया हूँ, तो कृपया मेरे साथ बेकार है।एएसपीनेट एमवीसी 3 में नियंत्रक कार्रवाई के लिए फॉर्म डेटा भेजने के विभिन्न तरीके क्या हैं?

मैं एक फॉर्म डेटा पोस्ट करना चाहता हूं जिसमें ग्रिड प्रकार का लेआउट है और प्रत्येक पंक्ति में एक कॉलम ड्रॉपडाउनलिस्ट है। उस पंक्ति के आइटम आईडी पर ड्रॉपडाउन सूची मानचित्र में चयनित मान।

मैं जानना चाहता हूं कि इस डेटा को इस मामले में नियंत्रक कार्रवाई में पोस्ट करने के विभिन्न तरीके क्या हैं?

व्यक्तिगत पैरामीटर के रूप में पास करना पहले से ही अनदेखा कर दिया गया है क्योंकि मेरे फॉर्म में गतिशील डेटा होगा और इसमें रिकॉर्ड्स की संख्या हो सकती है। क्या मैं इस सोच में सही हूँ?

फॉर्मकॉलेक्शन का विचार, क्या यह सही विकल्प है?

उत्तर

5

हमेशा की तरह मैं एक दृश्य के मॉडल को परिभाषित करते हुए शुरू होगा:

public class MyViewModel 
{ 
    public string SelectedValue { get; set; } 
    public IEnumerable<SelectListItem> Values { get; set; } 
} 

तो किसी GET नियंत्रक कार्रवाई जिसे इस दृश्य के मॉडल का एक संग्रह से स्थापित हो जाएगा है और इसी को ध्यान में रखते मैं संपादक टेम्पलेट्स का प्रयोग करेंगे:

@model IEnumerable<MyViewModel> 
@using (Html.BeginForm()) 
{ 
    <table> 
     <thead> 
      <tr> 
       <th>Some column name</th> 
      </tr> 
     </thead> 
     <tbody> 
      @Html.EditorForModel() 
     </tbody> 
    </table> 

    <input type="submit value="OK" /> 
} 

और इसी संपादक टेम्पलेट में (~/Views/Shared/EditorTemplates/MyViewModel.cshtml):

@model MyViewModel 
<tr> 
    <td> 
     @Html.DropDownListFor(
      x => x.SelectedValue, 
      new SelectList(Model.Values, "Value", "Text") 
     ) 
    </td> 
</tr> 

और अंत में इस पोस्ट करेंगे चयनित मानों:

[HttpPost] 
public ActionResult Index(IEnumerable<MyViewModel> model) 
{ 
    ...  
} 
+0

@Darin: एक छोटा सा संदेह है, यह अनावश्यक प्रत्येक पंक्ति के लिए गुजर 'IEnumerable मान' नहीं है? क्या हम पूरी सूची के लिए एक बार यह सूची नहीं भेज सकते क्योंकि यह सभी पंक्तियों के लिए समान है? – JPReddy

+0

@ जेपीआरडी, हां, बेशक अगर एक ही ड्रॉपडाउन प्रत्येक पंक्ति पर दिखाया जाना चाहिए। शायद मैंने इस सवाल को गलत समझा और माना कि प्रत्येक पंक्ति पर एक अलग ड्रॉपडाउन का उपयोग किया जाना चाहिए। –

+0

@ डारिन: यहां तक ​​कि मुझे लगता है कि सभी पंक्तियों में एक ही ड्रॉपडाउन सूची का उपयोग किया जाता है, इस मामले में हम सभी पंक्तियों के लिए एकल सूची रखने के लिए मॉडल कैसे डिजाइन कर सकते हैं? कोई उपाय? – JPReddy

संबंधित मुद्दे