Désactiver la validation requise par JavaScript
J'ai créer un formulaire pour créer un objet.
La création de modèle a certaines propriétés qui ne sont visibles (.cacher, .show()) si une case est cochée et qui sont marqués comme requis (par Attribut dans le Modèle).
Malheureusement, si la case n'est pas cochée, la validation est effectuée sur les propriétés cachées.
Comment puis-je désactiver les exigences relatives à la validation de cette liste de propriétés?
J'ai essayé de définir les données-val de propriété de l'élément d'entrée pour de faux, mais cela ne fonctionne pas.
Certains une idée?
Merci d'avance
Tobias
Mise à JOUR:
Voici le code java script. Les données-val de propriété est correctement définie sur false. il semble que la validation ne se soucient pas de cette propriété. il y a aussi les données-val-attribut obligatoire mais il y a un texte que je ne pouvais pas la sauvegarde.
$(function () {
$("#MyCheckbox")
.change(function () {
if (this.checked) {
$("#divWithChildProperties [data-val]").attr("data-val", true);
$("#divWithChildProperties ").show();
}
else {
$("#divWithChildProperties [data-val]").attr("data-val", false);
$("#divWithChildProperties ").hide();
}
})
});
source d'informationauteur Tobias
Vous devez vous connecter pour publier un commentaire.
J'ai géré les cas de ce genre avec une mesure de Validation de l'Attribut. Au lieu d'utiliser l'attribut Obligatoire pour les propriétés, vous pourriez faire un RequiredIf attribut et de faire partie de vos propriétés requises uniquement si une autre propriété est à une certaine valeur.
Voici un post sur la création d'un attribut comme ceci (exemple dans le milieu de la page, sous le "de plus en plus complexe de validation personnalisée' section): http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2
Si votre case représente une propriété dans votre modèle, cela devrait fonctionner correctement.
Si vous ne voulez pas gérer cela avec une nouvelle validation de l'attribut que vous avez à faire un peu plus de choses que simplement modifier les données-val d'attribut à false. Lorsque jQuery validate première analyse de votre forme, il stocke les valeurs de données du formulaire. Donc, simplement en changeant de données-val n'est pas suffisant. Vous devrez en plus avoir à retirer la stockées les données de validation et d'analyse de la forme. Voici un exemple:
Vous pouvez utiliser la suite JQuery pour supprimer toutes les règles de validation de votre élément
Même façon, vous pouvez utiliser nom de la classe comme,
Si vous souhaitez supprimer règle spécifiquefaire comme ceci
Le javascript discret plugin fourni par MVC ne traite pas les propriétés des données à la volée. Au lieu de cela, il analyse les résultats sur le document de prêt et les caches.
Essayez d'appeler
$.validator.unobtrusive.parse(myForm)
sur votre formulaire après la modification de la propriété en question pour voir si elle vous donne les résultats attendus.Non-intrusif de validation des looks pour cet attribut
data-val="true"
Je suppose, que si vous faites un
$('#mycheckbox').data('val','false')
la validation de passer d'un élément avec id.Il y a probablement un moyen plus convenable de le faire, mais si pas, profiter de cette.
acclamations.
Il existe de nombreuses façons de désactiver discrète de validation en Javascript, mais la plupart d'entre eux semble un peu hackish...
http://www.nitrix-reloaded.com/2013/09/16/disable-client-side-validation-on-a-button-click-asp-net-mvc/
data-val
attributfalse
. Mais il y a un truc...Discrète données de validation est mis en cache lorsque le document est prêt. Cela signifie que si vous avez
data-val='true'
au début et que vous le changer plus tard, il sera toujourstrue
.Donc, si vous voulez le changer une fois que le document est prêt, vous avez aussi besoin de réinitialiser le programme de validation qui va effacer les données mises en cache. Voici comment le faire :
Vous n'avez pas besoin de réinitialiser tous les messages, les styles de saisie et de validation de résumé pour être en mesure de soumettre le formulaire, mais il est utile si vous voulez changer la validation après le chargement de la page. Sinon, même si vous modifiez la validation, les messages d'erreur précédent seront toujours visibles...
La valeur par défaut
DataAnnotationsModelValidatorProvider
ajoute un attribut Obligatoire pour tous les types de valeur. Vous pouvez modifier ce comportement en ajoutant le code dans cette réponse.Vous pourriez mettre en œuvre un validateur personnalisé comme "RequiredIf".
Qui va garder votre modèle de conception tout à fait évident (à la différence du côté client des solutions proposées). Cela vous permet de garder la logique de validation distincte de la logique d'affichage (c'est ce que MVC est tout au sujet).
Voir cette réponse : RequiredIf Conditionnelle De Validation De L'Attribut
et, finalement, que le post de blog : Conditionnelle de Validation ASP.NET MVC 3
cheers!