Question:
Je sais que peut être utilisé pour la vérification des objets lors de la comparaison des attributs. Cependant, j'espère utiliser des attributs pour vérifier un seul attribut et ignorer des attributs spécifiques dans certains scénarios. Mon implémentation ci-dessous est-elle incorrecte?
Réponse: IValidatableObject
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) { if (!this.Enable) { // 在此处返回有效结果。 // 如果整个对象未“启用”,我不关心 Prop1 和 Prop2 是否超出范围 } else { // 在此处检查 Prop1 和 Prop2 是否满足其范围要求 // 并相应地返回。 } } }
utilise <只>, uniquement lorsque la vérification échoue, le résultat de vérification sera ajouté à la collection
. Si la vérification est réussie, elle ne sera pas ajoutée, ce qui signifie le succès.Vérification de l'exécution:
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); // 其他一些随机测试 if (this.Prop1 > this.Prop2) { results.Add(new ValidationResult("Prop1 必须大于 Prop2")); } } return results; } }
Validator.TryValidateProperty()
Définir <置> sur results
pour s'assurer que seuls les attributs d'attributs
sont autorisées à vérifier.
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); }
.. les blocs de code sont également formatés pour une meilleure lisibilité. >
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!