2010-11-24 40 views
4

Nous avons configuré les classes POCO à l'aide des annotations de données.Validation d'une partie du modèle avec les annotations ASP.NET MVC & Data

Pour l'une de ces classes, nous invitons plus d'une vue pour que l'utilisateur remplisse toutes ses données. Par exemple, s'il s'agissait d'une classe avec un nom d'utilisateur et un mot de passe en tant que propriétés, nous demandons à l'utilisateur de spécifier son nom d'utilisateur sur la première page et de spécifier son mot de passe sur la deuxième page. Maintenant, si j'utilise la classe complète POCO (qui nécessite que le nom d'utilisateur & mot de passe est fourni) alors quand nous demandons ModelState.IsValid ont été fausses puisque le mot de passe n'a pas encore été fourni, mais nous savons que le mot de passe va être fourni sur la page suivante!

Existe-t-il un moyen générique pour nous de valider les éléments du modèle pour lesquels les valeurs auraient dû être fournies plutôt que le modèle entier? Je sais que je peux supprimer les erreurs pour les éléments individuels de ModelState. Je sais que nous pourrions séparer les éléments du modèle pour avoir des modèles séparés pour chaque partie de la page de l'entrée qui est en cours d'exécution, mais cela donne l'impression que nous modifions la classe sous-jacente pour l'adapter davantage à la vue.

Cordialement

Jamie

Répondre

0

Essayez de mettre la validation sur les classes ViewModel. Chaque vue aura sa propre classe ViewModel. Une avec le nom d'utilisateur, l'autre avec le mot de passe. N'utilisez pas le modèle avant d'avoir rassemblé toutes les données dont vous avez besoin.

+0

Mais là est le problème pour moi. Nous avons déjà spécifié la validation requise sur la classe POCO et ne dupliquons-nous pas cette activité en la mettant sur d'autres classes? J'apprécie que nous puissions en fait séparer les choses, mais le modèle spécifie à travers les annotations ce qui est requis et ce qui ne l'est pas. – jamie

+0

Je suis d'accord, vous ne voulez pas dupliquer les règles de validation. Je pense que le lien fourni par Jamie donne la réponse que vous cherchez. – Steven