मैं एक गतिशील इनपुट क्षेत्र में सत्यापन जोड़ने की कोशिश कर रहा हूँ। मैं जो कर रहा हूं वह मूल रूप से एक फ़ील्ड को छुपाता है और दिखाता है (दोनों में लॉगिंग और पंजीकरण फॉर्म 1 में) इस तरह:

<div id="RegBoxStorage" style="display: none;">
    @Html.LabelFor(m => Model.Name)
    @Html.TextBoxFor(m => Model.Name)
    @Html.ValidationMessageFor(m => m.Name)
</div>
@using (Html.BeginForm("Login", "Auth", FormMethod.Post, new { id = "AuthForm" }))
{
<div id="RegBox" style="display: none;">
</div>
<div id="LoginBox">

    @Html.LabelFor(m => Model.Email)
    @Html.TextBoxFor(m => Model.Email)
    @Html.ValidationMessageFor(m => m.Email)

    @Html.LabelFor(m => Model.Password)
    @Html.TextBoxFor(m => Model.Password)
    @Html.ValidationMessageFor(m => m.Password)
</div>
<input type="submit" id="BtnAuthSub" value="Login" />
or <a id="ToggleAuth" href="#">Sign Up</a>
}

लिपी:

$('#AuthForm').removeData("validator");
$('#AuthForm').removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse(this.authForm); // error here

प्लगइन:

(function ($) {
  $.validator.unobtrusive.parseDynamicContent = function (selector) {
    //use the normal unobstrusive.parse method
    $.validator.unobtrusive.parse(selector); //Error here

    //get the relevant form
    var form = $(selector).first().closest('form');

    //get the collections of unobstrusive validators, and jquery validators
    //and compare the two
    var unobtrusiveValidation = form.data('unobtrusiveValidation');
    var validator = form.validate();

    $.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
      if (validator.settings.rules[elname] == undefined) {
        var args = {};
        $.extend(args, elrules);
        args.messages = unobtrusiveValidation.options.messages[elname];
        //edit:use quoted strings for the name selector
        $("[name='" + elname + "']").rules("add", args);
      } else {
        $.each(elrules, function (rulename, data) {
          if (validator.settings.rules[elname][rulename] == undefined) {
            var args = {};
            args[rulename] = data;
            args.messages = unobtrusiveValidation.options.messages[elname][rulename];
            //edit:use quoted strings for the name selector
            $("[name='" + elname + "']").rules("add", args);
          }
        });
      }
    });
  }
})($);

इसलिए जब कोई उपयोगकर्ता ToggleAuth पर क्लिक करता है, तो मैं फॉर्म के अंदर सामग्री को RegBoxStorage से RegBox पर ले जाता हूं। अब मुझे इनपुट में सत्यापन को मैन्युअल रूप से जोड़ने की आवश्यकता है। सभी विनीत सत्यापन विशेषताएँ पहले से ही इस पर हैं। तो इस answer से, मैं कोशिश की और कहता है $.validator is undefined

लेकिन फॉर्म के अन्य हिस्सों को वास्तव में मान्य किया गया है, यह दर्शाता है कि सत्यापन कार्य करता है, मेरे पास jquery.validation और jquery.validation.unobtrusive सत्यापन दोनों संदर्भित हैं। क्या समस्या हो सकती है?

मैंने इस ब्लॉग से प्लगइन एक्सटेंशन भी लिया। .

4
Shawn Mclean 9 अगस्त 2011, 02:00
क्या आप अपना जावास्क्रिप्ट कोड जोड़ सकते हैं?
 – 
MorioBoncz
9 अगस्त 2011, 02:36
मेरे पास एक ही समस्या थी, समस्या यह थी कि एमवीसी 4 _Layout.cshtml में डिफ़ॉल्ट रूप से मान्य बंडल प्रस्तुत नहीं करता है।
 – 
Johann Blais
8 अक्टूबर 2012, 09:36

1 उत्तर

सबसे बढ़िया उत्तर

कुछ चीजें जांचें:

  • आपने विस्तार लिखा है लेकिन फिर भी खंड में स्क्रिप्ट का उपयोग $.validator.unobtrusive.parse(this.authForm) - सुनिश्चित करें कि आप parseDynamicContent का उपयोग करते हैं।

  • सुनिश्चित करें कि आप प्लगइन कोड से पहले सत्यापन.जेएस और सत्यापन.अविभाज्य.जेएस का संदर्भ लें।

  • सुनिश्चित करें कि आपका स्क्रिप्ट अनुभाग jQuery document.ready फ़ंक्शन के अंदर है और प्लगइन के बाद निष्पादित होता है।
7
MorioBoncz 9 अगस्त 2011, 08:56
3
मेरे मामले में, यह पता चला कि मैं सोचता रहा कि मेरे पास सही स्क्रिप्ट शामिल है, लेकिन वास्तव में यह jquery.unobtrusive-ajax था न कि jquery.validate.unobtrusive .. .. मुझे देखने से पहले मुझे कुछ समय लगा।
 – 
Jim Wolff
9 अगस्त 2013, 11:48