Validation de niveau classe / modèle (par opposition au niveau de propriété)? (ASP.NET MVC 2.0)
Fondamentalement, ce que dit le titre. J'ai plusieurs propriétés qui se combinent ensemble pour vraiment faire une réponse logique, et je voudrais lancer une validation côté serveur de code (que j'écris) qui prennent ces multiples champs en compte et de s'accrocher à une seule validation de sortie/message d'erreur que les utilisateurs voient sur la page web.
J'ai regardé scott guthries méthode de l'extension de l'attribut et de l'utiliser dans votre dataannotations déclarations, mais, comme je peux voir, il n'y a pas de façon de déclarer une dataannotations-attribut style sur de multiples propriétés, et vous ne pouvez placer les déclarations (comme [e-Mail], [Plage], [Obligatoire]) sur une propriété :(.
j'ai regardé le PropertiesMustMatchAttribute par défaut dans le mvc 2.0 projet qui s'affiche lorsque vous démarrez un nouveau projet, cet exemple est aussi utile qu'à l'aide d'une paire de broches pour vérifier votre huile de moteur - inutile!
j'ai essayé cette méthode, cependant, la création d'un niveau de classe de l'attribut, et n'ai aucune idée de comment faire pour afficher le message d'erreur de cela dans ma page aspx. j'ai essayé le code html.ValidationMessage("ClassNameWhereAttributeIsAdded") et une variété d'autres choses, et il n'a pas fonctionné. et je dois le mentionner, il n'y a PAS UN post de blog sur le fait de faire de la validation à ce niveau - alors que c'est un besoin commun à un projet ou une entreprise de la logique de scénario!
quelqu'un peut m'aider à avoir mon message affiché dans ma page aspx, et aussi si possible un document ou référence expliquant la validation à ce niveau?
source d'informationauteur Erx_VB.NExT.Coder | 2010-05-06
Vous devez vous connecter pour publier un commentaire.
Maintenant que vous avez regardé Annotations de Données et est arrivé à la conclusion qu'ils ne sont pas adaptés à votre scénario, je vous suggère de regarder FluentValidationson l'intégration avec ASP.NET MVC et de la façon dont vous unité de tester votre logique de validation - vous ne serez pas déçu (je n'ai vraiment rien contre les annotations de Données, ils sont parfaits pour des articles de blog et des tutoriels mais une fois que vous êtes confronté à des applications du monde réel que vous rendrez vite compte des limites).
Mise à JOUR:
Comme demandé dans la section des commentaires, voici un exemple d'utilisation de la FluentValidation cadre avec une validation côté serveur, la fonction accès à de multiples propriétés (merci de ne pas faire ce qu'il est moche et il y a de mieux):
Le moyen plus naturel de le faire est le suivant (il est également à l'abri de la propriété renommer comme il ne contient pas de magie de chaînes de caractères):
Je ne suis pas sûr, mais c'est vous qui le garde en bas à droit de vote de mes réponses/questions sans raison apparente (Ou b/c de mon point de vue sur VB.NET)?
De toute façon,
PropertiesMustMatchAttribute
est juste une bonne mise en œuvre de l'aide de valeurs d'une propriété spécifique sur un objet. Si vous avez besoin d'exécuter une certaine logique à l'aide de plusieurs champs d'un objet, vous pouvez le faire par la suite, semblable à ce quePropertiesMustMatchAttribute
.Ci-dessous serait la partie principale d'un
ValidationAttribute
qui accède aux propriétés de l'objet pour exécuter une certaine logique.PropertiesMustMatchAttribute
est seulement à l'aide deReflection
pour accomplir une tâche commune. J'ai essayé de briser le code pour le rendre plus lisible et plus facile à comprendre.Possible Dupe:
L'écriture d'un CompareTo DataAnnotation Attribut
Les réponses à vos questions devraient être là et à tout le moins, il pointe sur ce blog:
http://byatool.com/mvc/custom-data-annotations-with-mvc-how-to-check-multiple-properties-at-one-time/
Pour obtenir le message d'erreur à l'écran, vous devez utiliser:
Ce qui se passe est parce que votre validation sur un niveau de classe une ModelState avec une clé, aka le nom de la propriété en général, avec une chaîne vide.
Lors de la création de niveau de la classe de l'attribut par le sous classement de ValidationAttribute , si la validation échoue il n'y a pas de clé correspondante dans la ModelState => il sera une chaîne vide, mais d'un travail autour est fournie dans le lien fourni ci-dessous, qui aidera U pour afficher le message d'erreur à ur, en Vue
en utilisant simplement le code html.ValidationMessage("urpropertyname") au lieu de ce que U essayé html.ValidationMessage("ClassNameWhereAttributeIsAdded") .
Impossible de définir membernames de validation personnalisée attribut dans MVC2
Je sais que cela a déjà été répondu, mais il semble que MVC3 a ajouté une autre façon de procéder si vous souhaitez continuer à utiliser DataAnotations Attributs.
Votre classe peut implémenter la Ivalidatableobjet interface qui fournit une méthode de validation. Juste une autre façon à la peau d'un chat.
j'ai fait ce qui suit, à l'aide de FluentValidator, si c'est utile à tout le monde, grâce à Darin recommandations:
comme d'habitude, j'ai été trompé en pensant que MVC est un framework complet, où le monde réel scénarios étaient possibles. comment font-elles publier de telles choses et de ne pas même mentionner ses limites je ne comprends pas, nous, développeurs, puis courir dans des questions qui sont un cauchemar pour se déplacer ou de nous devons compter sur la 3ème partie de choses à faire, ce qui est intrinsèquement MVC responsabilité, et si 3ème partie, les articles n'étaient pas disponibles - alors quoi?
ce n'est pas la 1ère chute grave de retour, j'ai trouvé dans mvc 2.0 soit, la liste continue de s'allonger.
sûr que l'équipe continue de donner à ces "cool" des exemples de la façon dont les choses simples sont à l'aide de l'imaginaire des non-exemples dans le monde réel, et quand il s'agit de choses sérieuses, c'est comme "bon, on ne sais pas ou les soins, ni nous de vous le dire, vous aurez juste à l'utiliser et de régler vous-même" type face
oh, et mise à jour de plusieurs pièces de vue dans un voyage aller-retour est toujours pas possible, sauf si vous utilisez un js hack et coupez le retour html et de l'affecter à différents div... vous ne pouvez même pas retourner plusieurs points de vue, ou au moins de mettre à jour plusieurs zones d'une page en mode natif (aller-retour), c'est juste triste.
Peut-être quand MVC atteint la version 3.0, il peut effectivement être complet, croisons les doigts, comme le dotnet framework n'était pas réaliste "complet", jusqu'à ce que clr 3.5 & y compris linq/EF SQL...