2 votes

Annotations de données avec Entity Framework+MVC

J'ai un modèle d'entité très basique auquel j'essaie d'ajouter des messages de validation personnalisés.

Mes métadonnées ressemblent à 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 que j'ajoute ne se propage pas aux erreurs de la vue - celles-ci restent les erreurs par défaut.

Je suis sûr qu'il y a quelque chose de simple que je manque ici...

1voto

jfar Points 19380

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

0voto

Robert Koritnik Points 45499

À quoi ressemble votre vue ? Vous devez vous assurer que vos entrées ont des identifiants corrects.

En MVC1, vous devriez écrire

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

En MVC2, c'est encore plus facile, surtout si vous avez une vue de type forte. 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 se fera avant que votre exécution n'entre dans cette action. Vous pourrez donc simplement vérifier ModelState.IsValid . Mais en MVC, c'est le meilleur moyen d'écrire un filtre d'action personnalisé qui valide vos objets. Vous devez alors décorer votre action avec cet attribut de filtre et voilà. Vos objets seront validés et vous pourrez agir en conséquence.

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