Comment manuellement revalider / déclencher la validation à l'aide discrète de jQuery de validation?

J'ai créé mon propre conditionnelle attribut validation pour valider mon modèle MVC sur le client et le serveur en héritant de RequiredAttribute et la mise en œuvre de IClientValidatable. L'idée est que si une propriété booléenne sur mon modèle est vrai, puis une autre propriété est requise. Dans la vue, ce phénomène se manifeste comme une case à cocher qui dicte si une zone de texte doit être rempli.

Cela fonctionne parfaitement, sauf lorsque l'utilisateur effectue les actions suivantes:

  • Vérifie la case (le champ est maintenant nécessaire).
  • Soumet le formulaire (côté client validation, le message d'erreur affiché).
  • Utilisateur décoche la case (message d'erreur reste affiché, le champ n'est plus nécessaire).

Je tiens à revalider le formulaire lorsque la case est cochée ou décochée, ou encore mieux, juste à revalider ce domaine, de sorte que le message d'erreur ne s'affiche plus. J'ai essayé différentes combinaisons de l'appel de jQuery validate() méthode, mais rien ne semble être en mesure de ré-exécuter la validation.

- Je utiliser le code javascript suivant pour configurer ma fonction de validation et la discrète adaptateur.

$.validator.addMethod(
    "requiredif",
    function(value, element, parameters) {
        var selector = "#" + parameters["dependentpropertyname"];
        var triggerValue = parameters["triggervalue"].toString().toLowerCase();
        var actualValue = $(selector).is(":checked").toString().toLowerCase();
        if (actualValue === triggerValue) return $.validator.methods.required.call(this, value, element, parameters);

        return true;
    });

$.validator.unobtrusive.adapters.add(
    "requiredif",
    ["dependentpropertyname", "triggervalue"],
    function(options) {
        options.rules["requiredif"] = {
            dependentpropertyname: options.params["dependentpropertyname"],
            triggervalue: options.params["triggervalue"]
        };
        options.messages["requiredif"] = options.message;
    }
);

Merci!

OriginalL'auteur andrej351 | 2012-07-18