2010-09-01 10 views
1

J'ai lu des annotations de données (c'est-à-dire Scott Guthrie's blog post) et je suis ravi de l'idée d'avoir une logique de validation en un seul endroit.Annotations de données pour un sous-ensemble de propriétés

Est-ce que quelqu'un a été capable d'utiliser cette technique avec succès lorsqu'il a invité l'utilisateur à entrer un sous-ensemble des propriétés associées à une classe donnée?

Par exemple (pseudo-code) ...

public class Person 
{ 
    [Required] 
    public string Name 

    [Required] 
    public string Email 
} 

Alors disons que vous avez une vue qui affiche une forme uniquement avec le nom. La valeur de ModelState.IsValid dans le contrôleur HttpPost pour cette vue sera toujours false, car Email est requis et manquant. J'ai pensé à avoir des modèles séparés, un pour la partie qui ne nécessite que le nom, et un autre pour la partie qui nécessite à la fois Nom et Email, mais je brise le principe de DRY parce que je vais avoir le nom logique de validation à deux endroits.

Des suggestions? Peut-on obtenir des annotations de données fonctionnant de cette manière? Devrais-je simplement avoir deux classes distinctes? Peut-être un CustomValidationAttribute qui vérifie un drapeau avant de déterminer si un courriel est requis?

+0

Je ne suis pas du genre à m'attribuer ma propre réponse, mais je vois que Steve Sanderson s'est attaqué à cela sur http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc- 2/- si quelqu'un veut lire et poster une réponse ... :) – Mayo

+0

le comportement par défaut de MVC 1 a été changé pour une bonne raison. Je ferais vraiment très attention à la solution de Steve. – jfar

Répondre

3

Chaque vue doit avoir son propre modèle de vue. Il y a des moments où vous pouvez réutiliser certains modèles de vue existants - c'est le temps que vous ne pouvez pas.

Je ne créerais un attribut personnalisé que si ces propriétés étaient sous une forme, et parfois les deux étaient obligatoires et parfois seulement l'un d'entre eux était requis. Si vous avez des vues séparées, je ferais un autre modèle de vue.

+0

Étant nouveau pour ASP.NET MVC, je ne suis pas entièrement sûr de la validité de "chaque vue devrait avoir son propre modèle de vue". En fait, dans les commentaires du lien de Sanderson que j'ai fournis ci-dessus, il y a des gens qui débattent de cette phrase exacte. Pouvez-vous fournir des liens vers des articles qui en traitent plus en détail? J'ai remarqué que le modèle Visual Studio suit apparemment ceci (c'est-à-dire ChangePasswordModel et LogOnModel) mais je ne trouve pas beaucoup d'informations à ce sujet. – Mayo

+0

@Mayo, parce que chacune de ces vues signifie une chose totalement différente dans un contexte différent. Ils ne partagent pas l'héritage ou même une relation et ne sont similaires que dans la mesure où ils partagent certaines propriétés. http://domaindrivendesign.org/node/91 – jfar

+0

Merci jfar et Necros - Je pense que ce que je cherche, c'est d'avoir un modèle de domaine et un modèle de vue. – Mayo