2012-03-09 18 views
7

में डायनामिक फॉर्म पोस्ट करना, यदि मैं उपयोगकर्ता द्वारा ड्रॉप डाउनलिस्ट "टाइप" का चयन करता हूं, तो मैं डायनामिक रूप से अन्य ड्रॉपडाउनलिस्टों का एक सेट दिखाऊंगा।एएसपी.नेट एमवीसी 3

उदाहरण के लिए, प्रकार: कार, अपार्टमेंट "कार" चुनना, गतिशील रूप से दो नई ड्रॉपडाउनलिस्ट "मूल्य" & "मॉडल" जोड़ देगा। "बिल्डिंग" का चयन, गतिशील रूप से दो नए ड्रॉपडाउनलिस्ट "क्षेत्र" & "मंजिल"

मेरा प्रश्न है कि पोस्ट किए गए डेटा को सर्वर पर कैसे संभालना है? मैं आम तौर पर फॉर्म के फ़ील्ड प्राप्त करता हूं और उन्हें स्वचालित रूप से "मॉडल बाध्य" मिलता है। लेकिन उन गतिशील क्षेत्रों के बारे में क्या जो उपयोगकर्ता के चयन के आधार पर पृष्ठ पर जोड़े गए थे? मैं उन्हें कार्रवाई के अंदर कैसे प्राप्त करूं?

धन्यवाद

+0

आप ajax का उपयोग कर –

+0

@COLDTOLD यह एक सर्वर साइड समस्या, ajax नहीं एक समाधान है कि किसी भी प्रभाव –

+0

@Marek Karbarz होता आप ajax –

उत्तर

2

आह ने इसे गलत समझा।

यदि आपको पता है कि ड्रॉपडाउन संभावित रूप से क्या जोड़ा जा सकता है, तो मेरे पास हमेशा आपके मॉडल पर एक मूल्य होगा। अगर कुछ भी प्राप्त नहीं होता है तो एमवीसी उन्हें डिफ़ॉल्ट मान के रूप में सेट करेगा।

संपादित करें: आप अभी भी रूपों संग्रह एक अधिक कच्चे रास्ते में भीतर नियंत्रकों से

Request.Form.Keys 
Request.QueryString.Keys 

Request["ExpectedDropdownName"] 
बेशक

इन सभी मूल्यों अपने फार्म द्वारा तैनात किया जाएगा का उपयोग कर उपयोग कर सकते हैं, ताकि आप में से एक की पहचान करने के लिए एक तरह से की आवश्यकता होगी उपसर्ग या कुछ की तरह आपके ड्रॉपडाउन। उदाहरण

foreach (var key in Request.Form.AllKeys.Where(k => k.StartsWith("dynamic-dropdown-")) 
    { 
     var selectedValue = Request[key]; 
    } 

के लिए मैं अभी भी वास्तव में समझने के नहीं आप कैसे गतिशील ड्रॉपडाउन कार्रवाई करने के लिए यदि आप वे क्या होगा पता नहीं है चाहते हैं और यह कुछ समस्याएं हो सकती हैं और मान्यता पूरी तरह से गतिशील और क्लाइंट साइड कर देगा (100% सुरक्षित नहीं)। इससे कुछ सुरक्षा मुद्दे भी सामने आ सकते हैं, लेकिन कुछ सागरियो हैं जहां आप इसका उपयोग कर सकते हैं और मैं मानता हूं कि उनमें से एक है।

यदि ऐसा नहीं है, तो यह न भूलें कि मॉडल के पास एक संपत्ति है, इसलिए इसे वापस पोस्ट करने की आवश्यकता नहीं है।

आप कर सकता है:

public class MyModel 
{ 
    [Required] 
    public string FirstName { get; set; } 

    public string PossibleDropdown1 { get; set; } 

    public string PossibleDropdown2 { get; set; } 
} 

नियंत्रक यह मॉडल पॉप्युलेट करने के लिए सबसे अच्छा है, लेकिन अगर आप कुछ क्षेत्रों रूप से वापस उत्तीर्ण नहीं होते हैं, वे सिर्फ अशक्त हो जाएगा और कार्रवाई अभी भी होगा करना होगा काम।

मैंने इस तरह के अधिक जटिल परिदृश्यों को भी लागू किया है जो माता-पिता मॉडल के बच्चे हैं और सभी नामुमकिन हैं। इसके लिए मैक में संपादक टेम्पलेट्स पर AJAX कॉल के आस-पास कुछ फैंसी काम की आवश्यकता है यह सुनिश्चित करने के लिए कि एमवीसी के लिए उपसर्ग सही है, लेकिन मैं यहां नहीं जाऊंगा।

+0

के साथ नए आइटम जोड़ने समस्या है द्वारा पेज का आंशिक हिस्सा ताज़ा कर सकते हैं है की कोशिश की है , ड्रॉपडाउन गतिशील हैं और हाथ से पहले जानना कोई रास्ता नहीं है कि ड्रॉपडाउन क्या दिखाएंगे! एक सवाल हालांकि, अगर मैं ड्रॉपडाउन के बिना एक्शन व्यू मॉडेल में इनपुट के रूप में सेट करता हूं, तो क्या एक्शन विधि के शरीर के अंदर फॉर्म कोलेक्शन तक पहुंचने का कोई तरीका है? – Bill

8

आप पृष्ठ पर सभी खाने का उपयोग करने की FormCollection उपयोग कर सकते हैं। लेकिन अगर आप बाध्यकारी स्वत: मॉडल खो देंगे और इस प्रकार अपने मूल्यों को खोजने के रूप संग्रह के माध्यम से पुनरावृति करना होगा:

public ActionResult ActionMethod(FormCollection formCollection) 
{ 
    foreach (var key in formCollection.AllKeys) 
    { 
     var value = formCollection[key]; 
    } 
} 

बेशक आप भी अपने मॉडल में गतिशील ड्रॉपडाउन शामिल हो सकते हैं।

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