Maison >développement back-end >C++ >Comment implémenter la validation de la propriété conditionnelle à l'aide de ivalidAtableObject dans .NET?

Comment implémenter la validation de la propriété conditionnelle à l'aide de ivalidAtableObject dans .NET?

Susan Sarandon
Susan Sarandonoriginal
2025-01-28 11:41:39870parcourir

How to Implement Conditional Property Validation Using IValidatableObject in .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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn