2011-06-07 15 views
10

एक जटिल रूप को लागू करने के लिए ASP.NET MVC में एक अच्छा दृष्टिकोण जहां प्रपत्र के वर्गों एक उपयोगकर्ता के इनपुट के आधार पर दिखाया गया है और छिपे हुए हैं क्या है?संरचना जटिल वेब प्रपत्रों

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

अतीत में, मैं इस परिदृश्य को UpdatePanel और एक रैपर Panel के माध्यम से उन क्षेत्रों के आस-पास संभालता हूं जिन्हें मैं दिखाना या छिपाना चाहता हूं। फ़ील्ड छुपाए जाने पर सत्यापन स्वचालित रूप से अक्षम हो जाता है।

आगे बढ़ते हुए, मैं एमवीसी की विशेषता-आधारित मॉडल सत्यापन का उपयोग करना चाहता हूं, लेकिन क्या अन्य गुणों के मूल्यों पर सत्यापन को सशर्त बनाना संभव है?

इसके अलावा, मैं फॉर्म फ़ील्ड के ब्लॉक की टॉगलिंग कैसे संभाल सकता हूं? मैं जानता हूं कि इसे jQuery में मैन्युअल रूप से कैसे किया जाए, लेकिन मुझे आशा है कि एक दृष्टिकोण है जो सत्यापन और सर्वर-साइड कोड से जुड़ता है।

मैं एमवीसी को समग्र रूप से बेहतर पसंद कर रहा हूं, लेकिन मुझे पता नहीं चला कि इस प्रकार के परिदृश्य को कैसे अच्छी तरह से संभालना है। शायद मुझे एमवीसी दृष्टिकोण के साथ बेहतर फिट करने के लिए बस अपनी सोच को बदलने की जरूरत है।

उत्तर

1

जोश,

पहली बात मैं के सुझाव है कि सुनिश्चित करें कि आप पृष्ठों के लिए ViewModels का उपयोग करने के लिए है प्रस्तुत करना सकता है कि मोड जटिल हैं। एक व्यू मॉडेल मूल रूप से एक मॉडल है जिसे आप एक विशिष्ट दृश्य के लिए बनाते हैं; उदाहरण के लिए, एक व्यूमोडेल अन्य वर्गों की रचना हो सकता है।

आपके दृश्य पर फ़ील्ड को गतिशील रूप से बदलने के लिए, सबसे अच्छा तरीका यह है कि इसे करने के लिए jQuery (या कोई अन्य जावास्क्रिप्ट लाइब्रेरी) का उपयोग करें।

मैं भी एक वेब फॉर्म पर्यावरण से माइग्रेट किया गया और मुझे पता है कि शुरुआत में गियर बदलना मुश्किल है, लेकिन मेरा विश्वास करो, एक साधारण jQuery भी हैंडलर एक नियंत्रण कक्ष डालने से पहले और फिर घटना संचालकों।

उल्लेख नहीं है कि यह अधिक कुशल है; अद्यतन पैनल पृष्ठ पर आंशिक पोस्ट करने के बाद होते हैं, कभी-कभी, jQuery के साथ आपको ऐसा करने की भी आवश्यकता नहीं होती है।

MVC के साथ कुछ परियोजनाओं के बाद, मैं वास्तव में अब यह समय लेने जाने के लिए और वेब फ़ॉर्म पर अद्यतन पैनलों करने के लिए लगता है;)

आशा इस मदद करता है, -Covo

0

पारंपरिक एएसपीनेट वेबफॉर्म आपके लिए "जादू" के बहुत सारे थे, जबकि आपको एएसपीनेट एमवीसी में "जादू" बनाने में काम करने के बारे में पता होना चाहिए। लाभ यह है कि एमवीसी के साथ आप क्या हो रहा है पर अधिक नियंत्रण रखते हैं जो प्रदर्शन को भी बढ़ा सकता है।

एएसपीनेट वेबफॉर्म में एक अपडेट पैनेल का उपयोग AJAX कॉल के लिए किया जाता है। यदि आपको सर्वर को असीमित रूप से प्राप्त करने की आवश्यकता है (पूर्ण पोस्ट वापस किए बिना) तो JQuery के माध्यम से AJAX का उपयोग करें। उदाहरण के लिए नीचे देखें:

  $.ajax({ 
        type: "get", 
        url: "/YourController/YourAction", 
        success: function (obj) { 
         //any logic you want to do upon success 
        } 
       }); 

ऊपर के उदाहरण क्या करेंगे एक ajax HTTP GET/YourController/YourAction को कहते हैं।

आदेश, "ब्लॉक के टॉगल" संभाल करने के लिए यदि आप डेटा के लिए सर्वर के लिए जाने की जरूरत नहीं है और आप बस क्लाइंट पर यह करने के लिए चाहते हैं, तो सरल jQuery का उपयोग करें। JQuery आइटम टॉगलिंग के लिए एक समारोह है। http://api.jquery.com/toggle-event/

1

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

आप अभी भी एक जटिल रूप के साथ आगे जाने के लिए चाहते हैं, तो के रूप में अन्य उत्तर पहले ही कहा गया है MVC द्वारा प्रदान की ऐसा करने की सुविधाएं हैं, लेकिन वहाँ किसी भी सेट तरीका नहीं है। तो, यह पता लगाने के लिए आप नीचे आ गए हैं कि आपके उपयोगकर्ताओं के लिए सबसे अच्छा क्या काम करेगा।

0

एमवीसी वेबफॉर्म के विपरीत काम करता है जिस तरह से आप वास्तव में सोचते हैं कि क्लाइंट पर क्या होता है और सर्वर पर अलग-अलग होता है क्योंकि मेटा-डेटा को वापस नहीं किया जा रहा है हमें वह खुश वेबफॉर्म महसूस करें।

हालांकि, वहाँ एक धारणा का उपयोग करते समय है निर्मित AJAX पुस्तकालयों जब आप एक रूप में आप इसे ऑटो एक बार यह पोस्ट किया जाता है एक अद्यतन करना हो सकता है प्रस्तुत करना।एक मायने में, यह आपको जावास्क्रिप्ट/JQuery की बचत कर रहा है क्योंकि यह "ऑटो-तार" इसे एक पैनल के समान-आश बनाता है। इस तरह आप संभावित उत्तरोत्तर, सर्वर से अपने जटिल रूपों प्रतिपादन के रूप में प्रत्येक अनुभाग संपादित किया जाता है आदि

देखें MSDN पर दे सकता है: http://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions.updatetargetid.aspx

प्रासंगिक कोड उदाहरण आप जानकारी देने के लिए (दुर्भाग्य से, यह नहीं है अधिक पठनीय रेजर सिंटैक्स में):

प्रासंगिक रेखा अजाक्स। बेजिनफॉर्म है जहां फॉर्म टैग प्रदान किया जाता है। फ़ॉर्म पोस्ट होने के बाद, एमएस AJAX लाइब्रेरी फॉर्म के AjaxOptions में निर्दिष्ट "UpdateTargetId" में निर्दिष्ट तत्व को स्वतः अपडेट करेगा। इस मामले में, सर्वर से उत्तर पर प्रतिक्रिया SPAN तत्व "textEntered" में रखी जाएगी। यहाँ, आप उत्तरोत्तर उपयोगकर्ता के लिए और अधिक सामग्री को भरने के लिए, शायद एक और रूप, आदि

<h2><%= Html.Encode(ViewData["Message"]) %></h2> 
<p> 
    Page Rendered: <%= DateTime.Now.ToLongTimeString() %> 
</p> 
<span id="status">No Status</span> 
<br /> 
<%= Ajax.ActionLink("Update Status", "GetStatus", new AjaxOptions{UpdateTargetId="status" }) %> 
<br /><br /> 
<% using(Ajax.BeginForm("UpdateForm", new AjaxOptions{UpdateTargetId="textEntered"})) { %> 
    <%= Html.TextBox("textBox1","Enter text")%> 
    <input type="submit" value="Submit"/><br /> 
    <span id="textEntered">Nothing Entered</span> 
<% } %> 
संबंधित मुद्दे