J'ai un modèle avec 4 propriétés qui sont de type string. Je sais que vous pouvez valider la longueur d'une seule propriété en utilisant l'annotation StringLength. Cependant je souhaite valider la longueur des 4 propriétés combinées.
Quelle est la manière MVC de faire cela avec l'annotation de données?
Je pose cette question parce que je suis nouveau dans MVC et que je veux le faire correctement avant de créer ma propre solution.
c#
.net
asp.net-mvc
asp.net-mvc-3
data-annotations
Danny van der Kraan
la source
la source
Réponses:
Vous pouvez écrire un attribut de validation personnalisé:
puis vous pourriez avoir un modèle de vue et décorer l'une de ses propriétés avec:
la source
this.RuleFor(x => x.Foo).Must((x, foo) => x.Foo.Length + x.Bar.Length + x.Baz.Length < 20).WithMessage("The combined minimum length of the Foo, Bar and Baz properties should be longer than 20");
. Maintenant, regardez le code dans ma réponse que vous devez écrire avec les annotations de données et dites-moi laquelle vous préférez. Le modèle de validation déclarative est très médiocre par rapport à un modèle impératif.IsValid
est appelé levalidationContext
est nul. Une idée de ce que j'ai mal fait? :-(Modèle auto-validé
Votre modèle doit implémenter une interface
IValidatableObject
. Mettez votre code de validation enValidate
méthode:Remarque: il s'agit d'une validation côté serveur . Cela ne fonctionne pas du côté client. Votre validation ne sera effectuée qu'après l'envoi du formulaire.
la source
ExpressiveAnnotations vous offre une telle possibilité:
la source
Pour améliorer la réponse de Darin, elle peut être un peu plus courte:
Modèle:
Notez qu'un message d'erreur est requis, sinon l'erreur sera vide.
la source
Contexte:
Des validations de modèle sont nécessaires pour garantir que les données reçues que nous recevons sont valides et correctes afin que nous puissions poursuivre le traitement avec ces données. Nous pouvons valider un modèle dans une méthode d'action. Les attributs de validation intégrés sont Compare, Range, RegularExpression, Required, StringLength. Cependant, nous pouvons avoir des scénarios dans lesquels nous avons besoin d'attributs de validation autres que ceux intégrés.
Attributs de validation personnalisés
Pour créer un attribut de validation personnalisé, vous devrez dériver cette classe de ValidationAttribute.
J'espère que cela t'aides. À votre santé !
Références
la source
Un peu tard pour répondre, mais pour qui cherche. Vous pouvez facilement le faire en utilisant une propriété supplémentaire avec l'annotation de données:
C'est tout ce que c'est vraiment trop. Si vous voulez vraiment afficher à un endroit spécifique l'erreur de validation, vous pouvez l'ajouter dans votre vue:
faire cela dans la vue peut être utile si vous souhaitez effectuer une localisation.
J'espère que cela t'aides!
la source