2010-02-25 5 views
2

J'ai un modèle d'entité très basique auquel j'essaie d'ajouter des messages de validation personnalisés.Annotations de données avec Entity Framework + MVC

Mes métadonnées ressemble à ceci:

namespace My.Models { 
[MetadataType(typeof(My.Models.ConsumerMetadata))] 
public partial class Consumer 
{ 
} 

public class ConsumerMetadata 
{ 
    [StringLength(5)] 
    [Required(ErrorMessage="First name is an absolute must!")] 
    public string FirstName { get; set; } 
} } 

Le problème est que l'annotation de données J'ajoute ne pas être propagé aux erreurs d'affichage - celles-ci restent les erreurs par défaut.

Je suis sûr que sa quelque chose de simple que je suis absent ici ...

+0

est-ce MVC ou MVC 2? –

Répondre

1

Avez-vous ajouté un Html.ValidationSummary() à votre page?

+0

Bon appel. Je n'ai pas, et en mettant un spectacle que mes métadonnées fonctionnent comme prévu. Le problème, alors, est avec Html.ValidationMessageFor (model => model.Property) - ceux-ci apparaissent toujours comme "La valeur" est invalide ". Cela semble être un bug connu: La valeur '' est invalide – Juvaly

+0

Un résumé de validation n'est pas nécessaire. Les messages de validation affichent des erreurs en place. Cela dépend de la façon dont vous voulez afficher vos erreurs. –

+0

Il est important dans ce cas puisque les messages de validation en ligne ont un bug connu (voir http://forums.asp.net/p/1529205/3699143.aspx) et le résumé de validation est le seul moyen d'afficher les messages corrects. – Juvaly

0

À quoi ressemble votre vue? Vous devez vous assurer que vos entrées ont ids correctes

En MVC1 vous devez écrire

<%= Html.TextBox("data.FirstName") %> 
<%= Html.ValidationMessage("data.FirstName") %> 

En MVC2 il est encore plus facile, surtout si vous avez une vue de type fort ViewPage<Consumer>

<%= Html.TextBoxFor(model => model.FirstName) %> 
<%= Html.ValidationMessageFor(model => model.FirstName) %> 

Votre action de contrôleur:

public ActionResult AddConsumer(Consumer data) 
{ 
    if (!this.ModelState.IsValid) 
    { ... } 
    ... 
} 

Dans MVC2, la validation aura lieu avant que votre exécution n'entre dans cette action. Donc, vous serez en mesure de simplement vérifier ModelState.IsValid. Mais dans MVC, c'est le meilleur moyen d'écrire un filtre d'action personnalisé qui valide vos objets. ils vous devez décorer votre action avec cet attribut de filtre et voilà. Vos objets seront validés et vous pourrez agir en conséquence.

+0

J'utilise MVC2. Lisez les commentaires ci-dessus pour voir que 1. J'ai mentionné que j'utilise l'assistant ValidationMessageFor et 2. que c'est un bug confirmé. – Juvaly

+0

@Juvaly: merci. Je n'étais pas au courant de ce problème, car je ne propage pas les classes EF aux vues (donc elles seraient validées). J'utilise POCOs à la place. –

Questions connexes