DataAnnotations: Récursive de la validation de la totalité d'un objet graphique
J'ai un objet graphique saupoudré avec des attributs DataAnnotation, où certaines propriétés des objets sont des classes qui ont eux-mêmes attributs de validation, et ainsi de suite.
Dans le scénario suivant:
public class Employee
{
[Required]
public string Name { get; set; }
[Required]
public Address Address { get; set; }
}
public class Address
{
[Required]
public string Line1 { get; set; }
public string Line2 { get; set; }
[Required]
public string Town { get; set; }
[Required]
public string PostalCode { get; set; }
}
Si j'essaie de valider un Employee
's Address
sans valeur pour PostalCode
, alors je voudrais (et attendre) une exception, mais j'en ai aucun. Voici comment je le fais:
var employee = new Employee
{
Name = "Neil Barnwell",
Address = new Address
{
Line1 = "My Road",
Town = "My Town",
PostalCode = "" //<- INVALID!
}
};
Validator.ValidateObject(employee, new ValidationContext(employee, null, null));
Ce que d'autres options s'offrent à moi avec Validator
qui permettrait de s'assurer que toutes les propriétés sont validés de manière récursive?
Merci beaucoup à l'avance.
- Essayez d'utiliser la coutume [ValidateObject] Voir stackoverflow.com/questions/2493800/...
Vous devez vous connecter pour publier un commentaire.
Ma réponse est trop long pour le mettre ici, donc j'en ai fait un post de blog 🙂
Récursive De Validation À L'Aide De DataAnnotations
La solution vous donne un moyen d'atteindre récursive de validation à l'aide de la même méthode de base que vous utilisez actuellement.
public IList<Address> Addresses
. Bref, merci pour la solution.Voici une alternative à l'opt-in attribut approche. Je crois que cette traversée de l'objet graphique correctement et de valider le tout.
Le plus up-to-date code:
https://github.com/reustmd/DataAnnotationsValidatorRecursive
Paquet:
https://www.nuget.org/packages/DataAnnotationsValidator/
Aussi, j'ai mis à jour cette solution pour gérer cyclique graphes d'objets. Merci pour les commentaires.
Install-Package dataannotationsvalidator
via nuget!)Code: