Maison >développement back-end >C++ >Comment implémenter la validation de la propriété conditionnelle à l'aide de ivalidAtableObject dans .NET?
Validation conditionnelle dans .NET en utilisant ivalidAtableObject
L'interface IValidatableObject
offre un moyen puissant d'effectuer une validation complète des objets dans .NET, y compris les vérifications de la propriété croisée. Cependant, l'ignorance sélective des règles de validation basées sur certaines conditions peut être délicate. Cet exemple montre comment atteindre efficacement la validation des propriétés conditionnelles.
Voici un extrait de code illustrant l'implémentation:
<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) { var results = new List<ValidationResult>(); if (Enable) { // Conditionally validate Prop1 and Prop2 Validator.TryValidateProperty(Prop1, new ValidationContext(this, null, null) { MemberName = "Prop1" }, results); Validator.TryValidateProperty(Prop2, new ValidationContext(this, null, null) { MemberName = "Prop2" }, results); // Add a custom conditional validation rule if (Prop1 > Prop2) { results.Add(new ValidationResult("Prop1 must be less than or equal to Prop2")); } } return results; } }</code>
Ce code utilise la propriété Enable
pour contrôler la validation. Si Enable
est vrai, il valide Prop1
et Prop2
en utilisant l'attribut [Range]
et une règle personnalisée garantissant que Prop1
n'est pas supérieure à Prop2
. La méthode Validator.TryValidateProperty()
est clé; Il ajoute uniquement des erreurs de validation à la liste results
si la validation échoue.
pour utiliser cette validation:
<code class="language-csharp">public void PerformValidation() { var toValidate = new ValidateMe { Enable = true, Prop1 = 6, //This will cause a validation error Prop2 = 2 }; bool validateAllProperties = false; // Important: Set to false for conditional validation var results = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject(toValidate, new ValidationContext(toValidate, null, null), results, validateAllProperties); //Process validation results (results list) }</code>
Le réglage validateAllProperties
à false
est crucial. Cela empêche Validator.TryValidateObject()
de remplacer la logique de validation conditionnelle. Cette approche combine IValidatableObject
avec validation conditionnelle pour la validation des objets flexible et robuste dans vos applications .NET.
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!