इसमें दो भाग हैं। सबसे पहले, आपको एक आवश्यक विशेषता लिखनी होगी जो केवल तभी जरूरी है जब अन्य संपत्ति आपके मानदंडों को पूरा करे। आप सत्यापनकर्ता रजिस्टर करने के लिए है, जो तुम सिर्फ RequiredAttribute के सत्यापनकर्ता का पुन: उपयोग कर सकते हैं होगा Global.asax में Application_Start में
public class RequiredComparerAttribute : RequiredAttribute
{
public OtherProperty { get; set; }
public override bool IsValid(object value)
{
// TODO: use reflection to validate other property as PropertyInfo
// or validate it's value after it is decided to be valid
foreach (ValidationAttribute va in property
.GetCustomAttributes(typeof(ValidationAttribute), true)
.OfType<ValidationAttribute>())
{
if (!va.IsValid(value))
{
return false; // not required
}
}
return true; // required
}
}
फिर,:
आप की तरह कुछ करने के लिए होगा
DataAnnotationsModelValidatorProvider
.RegisterAdapter(typeof(RequiredComparerAttribute),
typeof(RequiredAttributeAdapter));
यदि आप अपना खुद का सत्यापनकर्ता जोड़ना चाहते हैं, तो आपको एक कस्टम सत्यापनकर्ता लिखना होगा। फिल Haack ने अपने ब्लॉग पर एक उदाहरण है: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx
संपादित करें: कैसे OtherProperty का मूल्य प्राप्त करने की भावना के लिए नेट परावर्तक में CompareAttribute पर एक नजर डालें। तुलना करें एट्रिब्यूट क्लाइंट पक्ष पर आवश्यक सत्यापन नियम प्रदान करने के लिए IClientValidatable
लागू करता है।
I नहीं लगता है तुलनात्मकता आपके लिए काम करेगी क्योंकि आपको यह सत्यापित करना होगा कि किसी अन्य संपत्ति की सामग्री के आधार पर एक मूल्य आवश्यक है, दो गुणों की समानता की तुलना नहीं।
संपादित 2: प्रमाणीकरण प्रदाता क्या करता है?
यह फॉर्म में नियम जोड़ता है और उन नियमों के लिए संदेश प्रदान करता है। आप देख सकते हैं कि RequiredAttributeAdapter
एमवीसी 3 स्रोत डाउनलोड करके यह कैसे करता है। क्या यह ग्राहक के पक्ष है, तो आप खोल सकते हैं गूगल क्रोम में MVC 3 पेज को समझने के लिए, CTRL + SHIFT + जम्मू मारा एक डेवलपर टूल विंडो को लाने और प्रवेश करने के लिए:
$('form:first').data().unobtrusiveValidation.options
नियमों वस्तु के अंदर विकल्प निर्दिष्ट करता है प्रत्येक आइटम को सत्यापित करने के लिए और संदेश ऑब्जेक्ट त्रुटि संदेश निर्दिष्ट करता है जो प्रत्येक सत्यापन त्रुटि के लिए प्रदर्शित किया जाएगा।
Edit3: पूर्ण उदाहरण
इस सवाल का जवाब देने के बाद से, मैं ग्राहक (विनीत सत्यापन) और सर्वर पर एक कस्टम विशेषता बनाने की एक पूरी उदाहरण के साथ एक ब्लॉग पोस्ट में लिखा है। ब्लॉग पोस्ट here है। यह उदाहरण एक 'शामिल' विशेषता के लिए है, लेकिन यह एक आवश्यक तुलना बनने के लिए संशोधित करना बहुत आसान होना चाहिए।
कस्टम वैलिडेटर वेबफॉर्म के लिए है। वह एमवीसी में डेटा एन्नोटेशन के बारे में पूछ रहा है। –
क्या ?! आप नहीं जानते कि आप अपना कस्टम सत्यापनकर्ता लिख सकते हैं और इसे एमवीसी में उपयोग कर सकते हैं ?! इस ब्रैडविल्सन प्रस्तुति को देखें और जानें! http://bradwilson.typepad.com/blog/2011/02/advanced-aspnet-mvc-3-presentation.html – Zote
मैं एक 'कस्टम वैलिडेटर' कह रहा हूं http://msdn.microsoft.com/en-us/ लाइब्रेरी/system.web.ui.webcontrols.customvalidator.aspx आपके द्वारा jQuery सत्यापन प्लगइन में जोड़े गए नियमों से भिन्न है। एक सत्यापन प्रदाता जोड़कर, जैसा कि मेरे उत्तर में है, आप जोड़े गए नियमों को निर्दिष्ट कर रहे हैं। इन्हें डीओएम तैयार पर jQuery द्वारा पार्स किया गया है। एक सत्यापन प्रमाणीकरण स्क्रिप्ट जोड़ना आपके लिए इन नियमों को उत्पन्न करने के लिए DataAnnotations ढांचे को अनुमति देने के रूप में लचीला या पुन: प्रयोज्य नहीं है। –