Tout d'abord, merci à @paper1337 pour m'indiquer les bonnes ressources...je ne suis pas inscrit donc je ne peux pas voter, s'il vous plaît le faire si quelqu'un d'autre lit.
Voici comment accomplir ce que j'essayais de faire.
Traitement pouvant être validé classe:
public class ValidateMe : IValidatableObject
{
[Required]
public bool Enable { get; set; }
[Range(1, 5)]
public int Prop1 { get; set; }
[Range(1, 5)]
public int Prop2 { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
if (this.Enable)
{
Validator.TryValidateProperty(this.Prop1,
new ValidationContext(this, null, null) { MemberName = "Prop1" },
results);
Validator.TryValidateProperty(this.Prop2,
new ValidationContext(this, null, null) { MemberName = "Prop2" },
results);
// some other random test
if (this.Prop1 > this.Prop2)
{
results.Add(new ValidationResult("Prop1 must be larger than Prop2"));
}
}
return results;
}
}
À l'aide de Validator.TryValidateProperty()
permettra d'ajouter les résultats de la collecte, si il y a échoué. Si il n'est pas un échec de la validation, puis rien ne sera ajouter à la collection de résultat qui est une indication de la réussite.
Faire la validation:
public void DoValidation()
{
var toValidate = new ValidateMe()
{
Enable = true,
Prop1 = 1,
Prop2 = 2
};
bool validateAllProperties = false;
var results = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(
toValidate,
new ValidationContext(toValidate, null, null),
results,
validateAllProperties);
}
Il est important de fixer validateAllProperties
false pour que cette méthode fonctionne. Lors de l' validateAllProperties
est faux seulement des propriétés d' [Required]
d'attribut sont vérifiées. Cela permet à l' IValidatableObject.Validate()
méthode de gérer la condition de validation.