2017-09-04 1 views
-1

J'ai tenté d'implémenter une méthode de validation personnalisée ASP.NET MVC. Tutoriels que j'ai utilisé tels que codeproject expliquer que vous ajoutez data-val-customname à l'élément. Ensuite jQuery.validate.unobtrusive.js utilise alors le troisième segment de l'attributMéthode de validation personnalisée discrète non déclenchée selon la documentation

data-val-<customname>

comme le nom de la règle, comme indiqué ci-dessous.

$.validator.addMethod('customname', function(value, element, param) { 
    //... return true or false 
}); 

Cependant, je n'arrive pas à déclencher la méthode customname. En jouant, j'ai réussi à faire fonctionner le code ci-dessous, mais selon toutes les sources que j'ai lues, la validation discrète ne devrait pas fonctionner comme ça.

$.validator.addMethod('data-val-customname', function(value, element, param) { 
    //... return true or false 
}); 

J'ai posté un exemple des deux méthodes jsfiddle example

Toute aide serait grandement appréciée

J'ai mis à jour ma question, espérons-faire plus clair.

+0

Vous malentendu l'utilisation des données ''-val-attributs. Ils sont lus par 'jquery.validate.unobtrusive.js' pour ajouter les règles d'un élément, ce que vous ne faites pas actuellement. Voir la [mise à jour du violon] (https://jsfiddle.net/2hk3kqzk/14/) pour savoir comment ajouter les règles pour un élément –

+0

Merci pour votre réponse, j'étais peut-être sous l'impression que l'ajout d'un adaptateur effectué un remappage optionnel des paramètres ajoutés en tant qu'attributs à l'élément afin que les règles puissent accéder aux données dont ils ont besoin. La chose est cependant dans [le violon mis à jour] (https://jsfiddle.net/2hk3kqzk/14/) les deux méthodes de validation personnalisées ne se déclenchent toujours pas malgré l'ajout des adaptateurs à 'jquery.validate.unobtrusive.js'. –

+0

Désolé, je ne comprends pas ce que vous voulez dire. Si vous laissez la zone de texte vide et cliquez sur le bouton, le message défini par 'data-val-one' s'affiche, et si vous entrez une valeur, vous obtenez le message défini par' data-val-two', ce qui est supposé se passer. Qu'attendez-vous? –

Répondre

0

J'ai finalement trouvé là-bas à la fin, mais j'ai toujours l'impression d'avoir trop de travail et donc j'ai probablement quelque chose qui ne va pas. Initialement j'ai été scuppered par un bogue dans Chrome Canary 62 qui a refusé d'autoriser l'ajout d'une méthode personnalisée.

Mon prochain problème était de devoir charger jQuery, jQuery.validate et jQuery.validate.unobtrusive dans le balisage, puis d'isoler l'implémentation javascript dans une classe ES6. Je ne voulais pas ajouter mes adaptateurs avant $().ready() en raison de la structure de ma classe et du chargement du fichier d'application indépendant de jQuery. Donc j'ai dû forcer $.validator.unobtrusive.parse(document);. Malgré cela, j'avais toujours des problèmes et finalement débogué le code source et trouvé qu'une information de validateur existante attachée au formulaire ne fusionnait pas avec les règles analysées mises à jour, et ignorant essentiellement les nouvelles adaptations ajoutées.

Mon dernier travail autour et admettre se sent comme si j'avais trop fait, était de détruire les informations initiales de validation avant mon re-parse forcé.

Voici le travail jsfiddle demo

Voici un code simplifié

onJQueryReady() { 
    let formValidator = $.data(document.querySelector('form'), "validator"); 
    formValidator.destroy(); 

    $.validator.unobtrusive.adapters.add("telephone", [], function (options) { 
     options.rules['telephone'] = {}; 
     options.messages['telephone'] = options.message; 
    }); 

    $.validator.unobtrusive.parse(document); 

    $.validator.addMethod("telephone", this.handleValidateTelephoneNumber); 
}