मुझे लगता है कि आप पहले से ही यहाँ http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx) कस्टम एमएस AJAX ग्राहक सत्यापन के साथ काम करने का सत्यापन प्राप्त करने पर पीछा किया फिल Haack के निर्देशों। यह jQuery के साथ काम करने के लिए, आप MicrosoftMvcJQueryValidation.js फ़ाइल को संशोधित करने की आवश्यकता होगी:
__MVC_CreateRulesForField (validationField) समारोह में, आप एक मामले बयान जोड़ने की आवश्यकता होगी। ([ "मिनट"] rulesObj, thisRule.ValidationParameters)
__MVC_ApplyValidator_Price;: फिल के उदाहरण को जारी, आप जोड़ने की आवश्यकता होगी:
मामले "मूल्य"
ब्रेक;
फिर आप __MVC_ApplyValidator_Price समारोह बनाने की आवश्यकता होगी:
समारोह __MVC_ApplyValidator_Price (वस्तु, मूल्य) {
// min is what jQuery Validate uses to validate for minimum values
object["min"] = value;
}
फिल के लाने के लिए पर्याप्त होना चाहिए कि उदाहरण काम कर रहा है।
अब, आपके गुणों के बारे में MustMatchAttribute सत्यापन के संबंध में, ऐसा लगता है कि एमवीसी कक्षाओं को सजाने वाले विशेषताओं के लिए क्लाइंट-साइड जेसन सत्यापन परिभाषा उत्पन्न करता है। चूंकि PropertiesMustMatchAttribute मॉडल (और संपत्ति नहीं) पर उपयोग किया जाना चाहिए, इसलिए मैं यह नहीं समझ सकता कि इसे क्लाइंट-साइड सत्यापन को कैसे ट्रिगर करना है। इसके बजाय, मैंने एक अलग दृष्टिकोण लिया। मैंने एक डमी सत्यापन विशेषता बनाई है जो IsValid() अधिभार हमेशा सत्य देता है, और एक संपत्ति पर इस विशेषता का उपयोग किया। यह सिर्फ एक डमी विशेषता है जो सत्यापन सत्यापन को jQuery सत्यापनकर्ता के बराबर फ़ंक्शन पर प्रतिनिधि करेगा।
public class PropertiesMustMatchClientTriggerAttribute : ValidationAttribute
{
public string MatchProperty { get; set; }
public PropertiesMustMatchClientTriggerAttribute(string matchProperty)
{
MatchProperty = matchProperty;
ErrorMessage = "{0} doesn't match {1}.";
}
public override bool IsValid(object value)
{
return true;
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, MatchProperty);
}
}
यहां कस्टम सत्यापनकर्ता है::
DataAnnotationsModelValidatorProvider.RegisterAdapter (typeof:
public class PropertiesMustMatchClientTriggerValidator : DataAnnotationsModelValidator<PropertiesMustMatchClientTriggerAttribute>
{
private string _message;
private string _matchProperty;
public PropertiesMustMatchClientTriggerValidator(ModelMetadata metaData, ControllerContext context, PropertiesMustMatchClientTriggerAttribute attribute)
: base(metaData, context, attribute)
{
_message = attribute.FormatErrorMessage(metaData.DisplayName);
_matchProperty = attribute.MatchProperty;
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
var rule = new ModelClientValidationRule
{
ErrorMessage = _message,
ValidationType = "equalTo"
};
rule.ValidationParameters.Add("matchField", _matchProperty);
return new[] { rule };
}
}
ऊपर कस्टम सत्यापनकर्ता फिल के ब्लॉग प्रति Application_Start() में पंजीकृत होना आवश्यक है यहाँ डमी विशेषता है (PropertiesMustMatchClientTriggerAttribute), टाइपऑफ (PropertiesMustMatchClientTriggerValidator));
अंत में, आपको MicrosoftMvcJQueryValidation को संशोधित करने की आवश्यकता है।js फ़ाइल:
- __MVC_CreateRulesForField के लिए निम्न मामले बयान जोड़ें:
मामले "equalTo":
__MVC_ApplyValidator_EqualTo (rulesObj, thisRule.ValidationParameters [ "matchField"]);
ब्रेक;
समारोह __MVC_ApplyValidator_EqualTo (वस्तु, elemId) {
object["equalTo"] = document.getElementById(elemId);
}
अब आप एक संपत्ति के लिए डमी सत्यापन विशेषता साथ जोड़ने की आवश्यकता:
- इस समारोह जोड़ने
[PropertiesMustMatchClientTrigger("Password")]
public string ConfirmPassword { get; set; }
ऐसा करना चाहिए।
इस डमी विशेषता को बनाना थोड़ा बदसूरत है, इसलिए मुझे उम्मीद है कि कोई और अधिक सुरुचिपूर्ण समाधान के साथ आ सकता है।
दो सवाल यहाँ की तरह होते हैं: 1) कैसे आप क्लाइंट की तरफ मॉडल स्तरीय सत्यापन करते हैं? 2) आप jQuery का उपयोग करके उस सत्यापन को कैसे निष्पादित करते हैं? वे दोनों दिलचस्प प्रश्न हैं। आप इसे शामिल करने के लिए प्रश्न शीर्षक को अपडेट करना चाह सकते हैं। (मुझे # 1 के जवाब में दिलचस्पी है लेकिन गलती से इस प्रश्न पर हुआ।) –