धाराप्रवाह सत्यापन का उपयोग कर सशर्त सत्यापन


86

अगर मुझे जरूरत है तो अन्य क्षेत्रों में भरे जाने के आधार पर खेतों को सशर्त रूप से मान्य करने का एक तरीका है।

पूर्व। मेरे पास एक ड्रॉपडाउन और एक दिनांक फ़ील्ड है जो संबंधित हैं। यदि कोई भी फ़ील्ड सेट नहीं है, तो फ़ॉर्म को सत्यापन पास करना चाहिए। हालाँकि, यदि दो में से एक फ़ील्ड सेट है, लेकिन दूसरा नहीं है, तो सत्यापन में आग लगनी चाहिए, जिससे दूसरे फ़ील्ड को सेट किया जा सके।

मैंने कस्टम सत्यापन कक्षाएं लिखी हैं, लेकिन ऐसा लगता है कि यह एकल क्षेत्रों पर मान्य है। क्या वैधीकरण स्थापित करने का एक तरीका है जिसे मुझे वैधताओं में निर्मित उपयोग करने की आवश्यकता है? यदि नहीं, तो क्या कस्टम सत्यापनकर्ता का उपयोग करके दो क्षेत्रों को जोड़ने का एक अच्छा तरीका है?

जवाबों:


129

धाराप्रवाह सत्यापन सशर्त मान्यता का समर्थन करता है, बस द्वितीय खंड के मान की जांच करने के लिए जब क्लॉज का उपयोग करें:

https://fluentvalidation.net/start#conditions

जब / नियम के निष्पादन के समय नियंत्रित करने वाली स्थितियों को निर्दिष्ट करने के लिए कब और कब तक अनुपयोगी तरीकों के साथ एक स्थिति निर्दिष्ट की जा सकती है। उदाहरण के लिए, CustomerDiscount संपत्ति पर यह नियम केवल तभी निष्पादित होगा जब IsPreferredCustomer सत्य है:

RuleFor(customer => customer.CustomerDiscount)
    .GreaterThan(0)
    .When(customer => customer.IsPreferredCustomer);

जब तक कि विधि के विपरीत नहीं है।

आप एक कस्टम सत्यापनकर्ता को परिभाषित करने के लिए। NotVmpty शर्त पर संचालित होने वाले .SetValidator ऑपरेशन का उपयोग करने में भी सक्षम हो सकते हैं।

RuleFor(customer => customer.CustomerDiscount)
    .GreaterThan(0)
    .SetValidator(New MyCustomerDiscountValidator);

यदि आपको कई नियमों के लिए एक ही शर्त निर्दिष्ट करने की आवश्यकता है, तो आप नियम के अंत में जब कॉल कर सकते हैं, तो शीर्ष-स्तरीय कॉल विधि के बजाय कॉल कर सकते हैं:

When(customer => customer.IsPreferred, () => {
   RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
   RuleFor(customer => customer.CreditCardNumber).NotNull();
});

इस बार, शर्त को दोनों नियमों पर लागू किया जाएगा। आप कॉल को चैन से भी कर सकते हैं अन्यथा जो नियम से मेल खाएगा वह शर्त से मेल नहीं खाता:

When(customer => customer.IsPreferred, () => {
   RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
   RuleFor(customer => customer.CreditCardNumber).NotNull();
}).Otherwise(() => {
  RuleFor(customer => customer.CustomerDiscount).Equal(0);
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.