2011-11-06 28 views
5

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

+0

क्या आपके बिलिंग और शिपिंग पते अलग मॉडल हैं? या एक मॉडल पैक एक साथ? – chemicalNova

+0

वे एक ही मॉडल पर हैं। दोनों एक ही प्रकार के गुण हैं। – Mike

उत्तर

4

इसे संभालने के कई तरीके हैं। यदि आप क्लाइंट-साइड सत्यापन का उपयोग नहीं कर रहे हैं, तो आप मॉडल पर केवल IValidatableObject को कार्यान्वित कर सकते हैं, और IsValid() विधि को ओवरराइड कर सकते हैं और मॉडल की वैधता की जांच करने के लिए कुछ कोड कर सकते हैं।

यदि आप क्लाइंट-साइड सत्यापन का उपयोग कर रहे हैं, तो आपको कस्टम विशेषता की आवश्यकता है, या fluent validation जैसे कुछ का उपयोग करें।

4

आप एक कस्टम मान्यता विशेषता बनाकर ऐसा कर सकते हैं:

http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

यह का सार है कि आप एक नया वर्ग based off ValidationAttribute बनाना है, और IClientValidatable, ओवरराइड और लागू के रूप में आवश्यक हो, अपने ग्राहक को जोड़ने साइड सत्यापन (जिसे आपको किसी भी तरह की आवश्यकता है), और अपने वैकल्पिक फ़ील्ड में विशेषता लागू करें।

या चूंकि सत्यापन जितना जटिल हो उतना जटिल हो सकता है, इसे साझा आंशिक-वैकल्पिक, आंशिक रूप से आवश्यक फ़ील्ड पर लागू करें।

उस लड़के में एक पुस्तकालय का अल्फा भी है जो वह एमवीसी सत्यापन को अधिक लचीला बनाने के लिए लिख रहा है। इसे स्वयं इस्तेमाल नहीं किया है, लेकिन you could give it a try

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