1

J'ai cherché et googlé pour la réponse à cette question en vain. J'utilise EF4 et ASP.NET MVC2 et j'ai une entité EF4 "Award" avec un champ de chaîne non-nullable, "RecipientID". J'utilise DataAnnotations pour la validation côté serveur, donc dans ma classe partielle "Award", j'ai configuré le RecipientID pour avoir l'attribut Required. Lorsque j'essaie de soumettre le formulaire avec la zone de texte RecipientID vide, je vois mon message d'erreur "Veuillez entrer un destinataire" dans le Html.ValidationSummary deux fois. Est-ce parce que l'erreur est lancée à la fois par l'entité (en ce sens qu'il s'agit d'un champ non nullable avec une valeur nulle), ainsi que par l'application? Quelle que soit la raison, y a-t-il un moyen de "réparer" cela et d'afficher le message d'erreur une seule fois? (Fixe étant dans les citations parce que je ne suis pas sûr si c'est le comportement prévu ou pas.) Je ne pensais pas qu'il serait nécessaire d'inclure le code approprié, mais je le ferai si c'est nécessaire.Html.ValidationSummary montrant les messages d'erreur en double

Merci d'avance pour votre aide.

+0

Si vous affichez le code pertinent d'au moins votre modèle et votre vue, cela vous aidera à diagnostiquer le problème. – mlibby

+0

Merci pour votre aide, mais j'ai trouvé la réponse. :) – Erik

Répondre

2

Cela ressemble à ceci, selon Brad Wilson. J'aurais dû chercher "ConstraintException" et EF4. :)

Selon Brad, la validation d'entrée est déclenchée avant que le modèle ne soit lié, ce qui entraîne le lancement de l'erreur "Obligatoire". En outre, ces champs sont non-nullable, ce qui signifie qu'ils lancent le même "Obligatoire" lors de la liaison au modèle. À mon avis, il est un peu confus qu'il affiche le même message spécifié dans l'attribut "Required", plutôt qu'un message d'exception SQL, car il fait ressembler la même erreur. Ce qui n'est certainement pas le cas. C'est là le ConstraintException vient Afin d'éviter les messages en double, il suffit d'envelopper votre code de modèle contraignant comme ceci:.

if (ModelState.IsValid) { 
    ValidateModel(award); 
    repository.Add(award); 
    repository.Save(); 
} 

simple que cela. Merci!

0

J'ai trouvé cela en utilisant ModelState.Clear(); travaillé quand j'ai eu un problème similaire.

+0

Je n'utiliserais pas ModelState.Clear() pour cela car cela effacerait simplement les erreurs à la place. – Erik

Questions connexes