मान लेते हैं तो आपको निम्न मॉडल है कि चलो
@model MyViewModel
@using (Html.BeginForm())
{
@Html.LabelFor(x => x.IsChecked)
@Html.CheckBoxFor(x => x.IsChecked)
@Html.ValidationMessageFor(x => x.IsChecked)
<button type="submit">OK</button>
}
और Global.asax
में आप धाराप्रवाह सत्यापन मॉडल सत्यापनकर्ता प्रदाता पंजीकृत किया है:
FluentValidationModelValidatorProvider.Configure();
अब तक हम सर्वर साइड सत्यापन और चल ठीक है। अच्छी बात है। यह हमेशा पहला हिस्सा है जिसे हमें सेटअप करना होगा। मैंने लोगों को क्लाइंट साइड सत्यापन करने पर बहुत अधिक ध्यान केंद्रित किया है कि वे सर्वर साइड सत्यापन करना भूल जाते हैं और जब आप जावास्क्रिप्ट को अक्षम करते हैं (या यदि आप खराब इरादों वाले उपयोगकर्ता पर ठोकर खाते हैं तो भी बदतर), अच्छी तरह से, बुरी चीजें होती हैं। अब तक हम आश्वस्त हैं क्योंकि हम जानते हैं कि क्लाइंट पर कुछ खराब हो जाने पर भी हमारा डोमेन सर्वर साइड सत्यापन से सुरक्षित है।
तो चलिए अब ग्राहक सत्यापन की देखभाल करते हैं। बॉक्स के बाहर FluentValidation.NET EqualTo
सत्यापनकर्ता के लिए स्वचालित क्लाइंट सत्यापन का समर्थन करता है लेकिन जब किसी अन्य संपत्ति मान के विरुद्ध तुलना करता है जो [Compare]
डेटा एनोटेशन के बराबर है।
लेकिन हमारे मामले में हम एक निश्चित मूल्य के खिलाफ तुलना कर रहे हैं। इसलिए हमें बॉक्स से क्लाइंट साइड वाइल्डेशन नहीं मिलता है। और जब हमें बॉक्स से कुछ नहीं मिलता है, तो हमें इसे बॉक्स में रखना होगा।
तो हम एक कस्टम FluentValidationPropertyValidator को परिभाषित करने से शुरू:
public class EqualToValueFluentValidationPropertyValidator : FluentValidationPropertyValidator
{
public EqualToValueFluentValidationPropertyValidator(ModelMetadata metadata, ControllerContext controllerContext, PropertyRule rule, IPropertyValidator validator)
: base(metadata, controllerContext, rule, validator)
{
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
if (!this.ShouldGenerateClientSideRules())
{
yield break;
}
var validator = (EqualValidator)Validator;
var errorMessage = new MessageFormatter()
.AppendPropertyName(Rule.GetDisplayName())
.AppendArgument("ValueToCompare", validator.ValueToCompare)
.BuildMessage(validator.ErrorMessageSource.GetString());
var rule = new ModelClientValidationRule();
rule.ErrorMessage = errorMessage;
rule.ValidationType = "equaltovalue";
rule.ValidationParameters["valuetocompare"] = validator.ValueToCompare;
yield return rule;
}
}
कि हम Application_Start
में रजिस्टर करने के लिए जा रहे हैं:
FluentValidationModelValidatorProvider.Configure(provider =>
{
provider.AddImplicitRequiredValidator = false;
provider.Add(typeof(EqualValidator), (metadata, context, description, validator) => new EqualToValueFluentValidationPropertyValidator(metadata, context, description, validator));
});
अब तक हम EqualValidator साथ हमारे कस्टम FluentValidationPropertyValidator संबद्ध कर दिया है।
अंतिम भाग एक कस्टम एडाप्टर लिखना है:
(function ($) {
$.validator.unobtrusive.adapters.add('equaltovalue', ['valuetocompare'], function (options) {
options.rules['equaltovalue'] = options.params;
if (options.message != null) {
options.messages['equaltovalue'] = options.message;
}
});
$.validator.addMethod('equaltovalue', function (value, element, params) {
if ($(element).is(':checkbox')) {
if ($(element).is(':checked')) {
return value.toLowerCase() === 'true';
} else {
return value.toLowerCase() === 'false';
}
}
return params.valuetocompare.toLowerCase() === value.toLowerCase();
});
})(jQuery);
और है कि यह काफी है। अब सिर्फ़ ग्राहक स्क्रिप्ट शामिल करने के लिए है:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/customadapter.js")" type="text/javascript"></script>
धन्यवाद का उपयोग करने की जरूरत नहीं है, यह बहुत अच्छा है। लेकिन मुझे इसके साथ लाइनों को बदलना पड़ा: [वापसी मूल्य .toLowerCase() === ...] से: [वापसी params.valuetocompare.toLowerCase() === ...] – cryss
http: // stackoverflow देखें। कॉम/प्रश्न/21345078/फ़्लुएंटिडेशन-वैध-चेकबॉक्स-और-पासवर्ड-ऑन-द-क्लाइंट-साथ-बराबरडालिडेटो किसी समस्या के साथ एक समाधान के साथ एक और समान वैधकर्ता मौजूद है (उदाहरण के लिए पासवर्ड की पुष्टि करें)। – Ted