46 votes

Html.ValidationSummary(false, "message") est toujours affiché, même au chargement de la page.

J'utilise la validation côté client et je voudrais que le message ci-dessous ne s'affiche que lorsque j'ai une erreur. J'essaie d'utiliser ce message comme une erreur générale au cas où un champ serait invalide.
Actuellement

"* indique un champ obligatoire"

est toujours affiché, même avant la validation.

<%: Html.ValidationSummary(false, "* denotes required field.")%>

J'utilise le model binding pour effectuer la validation du côté client et MVC.

87voto

Ryan O'Neill Points 1938

Si vous utilisez un outil de développement dans votre navigateur pour inspecter le texte du résumé de validation, vous verrez qu'il a la classe validation-summary-**valid** quand il est clair mais validation-summary-**errors** lorsqu'il y a des erreurs de formulaire.

Par conséquent, il suffit de créer une règle css comme suit ;

.validation-summary-valid {
    display:none;
}

et tout devrait être bon.

24 votes

Pourquoi diable cela ne figure-t-il pas dans la feuille de style par défaut ?

2 votes

Et pourquoi diable le cadre exige-t-il qu'un seul message résume à la fois les modèles valides et invalides ?

3 votes

Si la validation côté client est activée, ils ne peuvent pas supprimer le div de la page comme ils le feraient côté serveur, car le js doit pouvoir l'afficher et le cacher. Ils auraient pu simplement utiliser display:none pour le cacher, mais ils ont préféré utiliser une classe qui vous donne plus de contrôle sur le style (au prix de vous faire configurer une règle de feuille de style dans tous les cas).

4voto

Mark P Points 29

Je pense que le problème vient du fait que le Html.ValidationSummary doit apparaître avant le Html.BeginForm, sinon le message s'affiche toujours. Html.BeginForm, sinon le message est toujours affiché.

2 votes

Mais si vous faites cela, vous perdez la vérification côté client.

3 votes

En déplaçant Html.ValidationSummary au-dessus de Html.BeginForm, il n'apparaît plus du tout (MVC 4 / Razor).

2 votes

Je suis d'accord - le problème du résumé qui s'affiche tout le temps ne se produit que lorsque ClientValidationEnabled est vrai. Cette solution est effectivement la même que de mettre cette valeur à false en cassant la validation côté client.

0voto

Kristianne Nerona Points 190

Au départ, je vérifiais la présence d'une propriété List au chargement de la page. pensé à passer un nouveau modèle. Ensuite, le résumé de la validation est apparu. Lorsque j'ai modifié mon code de

return View(new myModel)

à

return View()

le résumé de la validation n'est pas apparu sur Get. J'ai également ajouté une vérification de nullité sur le modèle lors de la vérification de la propriété afin que je puisse utiliser ce dernier code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X