2011-01-22 16 views
10

मेरे मॉडल में, ऐसा लगता है कि Validate() केवल दोनों गुणों को मान्य करने के बाद कहा जाता है।IValidalidableObject.Validate केवल तभी कहा जाता है जब संपत्ति सत्यापन पास हो जाता है?

public class MyModel : IValidatableObject 
{ 
    [Required] 
    public string Name { get; set;} 

    [Required] 
    public string Nicknames {get; set;} 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if(Nicknames != null && Nicknames.Split(Environment.NewLine.ToCharArray()).Count() < 2) 
      return yield result new ValidationResult("Enter at least two nicknames, new [] { "Nicknames" }); 
    } 
} 

एक उपयोगकर्ता Nicknames पाठ क्षेत्र में पाठ की एक पंक्ति में प्रवेश करती है, लेकिन खाली Name पाठ बॉक्स छोड़ता है, तो Name संपत्ति के लिए केवल Required त्रुटि संदेश प्रदर्शित होता है। Validate() फ़ंक्शन से प्रदर्शित होने वाला त्रुटि संदेश कभी दिखाई नहीं देता है।

Name टेक्स्ट बॉक्स में नाम दर्ज करने के बाद और Nicknames टेक्स्ट में कुछ टेक्स्ट Validate() फ़ंक्शन कहा जाता है।

क्या यह काम करना चाहिए? ऐसा लगता है कि किसी पृष्ठ को किसी पृष्ठ पर एक त्रुटि संदेश दिखाया गया है जब वर्तमान पृष्ठ पर त्रुटि हो रही है।

उत्तर

14

यह डिज़ाइन द्वारा है। ऑब्जेक्ट-स्तरीय सत्यापन तब तक आग नहीं लगाता जब तक सभी गुण सत्यापन पास नहीं करते हैं क्योंकि अन्यथा यह संभव है कि ऑब्जेक्ट अपूर्ण है। मान्य विधि एक संपत्ति की तुलना किसी अन्य चीज़ की तुलना में करने के लिए होती है। आपके मामले में आपको एक कस्टम प्रॉपर्टी वैलिडेटर लिखना चाहिए।

+2

यदि वैध विधि में संपत्ति सत्यापन के परिणाम शामिल हैं, तो हम इसे अपने लिए जांच सकते हैं। यानी शून्य IValidatableObject.Validate (सूची <प्रमाणीकरण परिणाम> परिणाम, प्रमाणीकरण कॉन्टेक्स्ट सत्यापन कॉन्टेक्स्ट) –

+0

@ एंथनी जोहानस्टन: यह सच है, लेकिन डेवलपर्स को इसकी जांच करने की आवश्यकता होगी इसका मतलब यह होगा कि वे आसानी से इसे देखना भूल सकते हैं, जिससे ढांचे में अच्छी तरह से संदर्भ अपवाद हो सकते हैं जानता है कि मॉडल वैध नहीं है। मुझे लगता है कि यह आम मामलों के लिए "सफलता के गड्ढे में गिरने" की मदद करने का मामला है, और दुर्लभ मामलों में केवल थोड़ी अधिक काम की आवश्यकता है जहां मॉडल को अमान्य समझा जाने के बाद भी और जानकारी प्रदान करना है। – StriplingWarrior

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

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