Validation de la propriété conditionnelle de maîtrise en utilisant ivalidAtableObject
L'interface IValidatableObject
est un outil robuste pour la validation complète des objets, particulièrement utile pour valider des objets complexes avec des dépendances interprétères. Cette interface permet des validations qui dépendent des valeurs d'autres propriétés dans le même objet. Cependant, la combinaison de cela avec des attributs de validation de propriété individuels (comme [Required]
ou [Range]
) nécessite une attention particulière.
La méthode IValidatableObject.Validate()
fournit le mécanisme pour effectuer ces contrôles conditionnels. Disons que vous devez valider Prop1
et Prop2
uniquement lorsque la propriété Enable
est vraie. Voici comment vous implémentez ceci:
<code class="language-csharp">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 (!Enable) { return Enumerable.Empty<ValidationResult>(); } var validationResults = new List<ValidationResult>(); // Add conditional validation rules here. For example: if (Prop1 < 1 || Prop1 > 5) { validationResults.Add(new ValidationResult("Prop1 must be between 1 and 5", new[] { nameof(Prop1) })); } if (Prop2 < 1 || Prop2 > 5) { validationResults.Add(new ValidationResult("Prop2 must be between 1 and 5", new[] { nameof(Prop2) })); } return validationResults; } }</code>
Surtout, lors de l'utilisation de Validator.TryValidateObject()
, définissez le paramètre validateAllProperties
sur false
. Cela empêche le cadre de valider automatiquement les propriétés avec des attributs comme [Range]
lorsque Enable
est faux, garantissant que votre logique conditionnelle dans Validate()
a priorité. Cela permet une séparation propre des préoccupations entre la validation des propriétés individuelles et la validation conditionnelle de la proper d'établissement.
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!