27 votes

Comment créer des validateurs d'annotation de données personnalisés

Vouloir créer des annotation de données de validation. Existe-il des guides utiles / échantillons sur comment les créer?

Tout d'abord:
StringLength avec longueur minimale et maximale. Je suis au courant .NET 4 pouvez le faire, mais vous voulez faire de même .NET 3.5, si possible, être en mesure de définir la longueur minimale seulement (au moins x caractères), le maximum de la longueur (jusqu'à x caractères), ou les deux (entre x et y, chars).

Deuxièmement:
Validation à l'aide du module de calcul si le nombre est la longueur valide, je souhaite valider à l'aide du Module 11 de l'algorithme (j'ai déjà implémenté en JavaScript, donc je suppose que c'était juste un simple portage?)

Mise à jour:
Résolu deuxième problème, c'était juste une affaire de copier le code JavaScript de la mise en œuvre et de faire un peu de bricolage, afin de ne pas avoir besoin d'une solution pour cela.

53voto

Robert Koritnik Points 45499

Pour créer une annotation de données du programme de validation procédez comme guide:

  1. Votre classe doit hériter de la System.ComponentModel.DataAnnotations.ValidationAttribute classe.
  2. Remplacer bool IsValid(object value) méthode et de mettre en œuvre une logique de validation à l'intérieur.

C'est tout.

Mise en garde IMPORTANTE

Parfois, les développeurs de vérifier que la valeur n'est pas null/vide et renvoie la valeur false. C'est généralement un comportement incorrect, parce que c'est sur Required du programme de validation pour vérifier ce qui signifie que votre validateurs personnalisés ne doit valider les données non nulles mais qui reviennent true dans le cas contraire (voir l'exemple). Cela permettra de les rendre utilisables sur obligatoire (obligatoire) et non des champs obligatoires.

Exemple

public class StringLengthRangeAttribute : ValidationAttribute
{
    public int Minimum { get; set; }
    public int Maximum { get; set; }

    public StringLengthRangeAttribute()
    {
        this.Minimum = 0;
        this.Maximum = int.MaxValue;
    }

    public override bool IsValid(object value)
    {
        string strValue = value as string;
        if (!string.IsNullOrEmpty(strValue))
        {
            int len = strValue.Length;
            return len >= this.Minimum && len <= this.Maximum;
        }
        return true;
    }
}

Toutes les propriétés peuvent être définies dans l'attribut que vous souhaitez définir.
Quelques exemples:

[Required]
[StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")]

[StringLengthRange(Maximum = 20)]

[Required]
[StringLengthRange(Minimum = 10, Maximum = 20)]

Lorsqu'une propriété n'est pas défini, sa valeur est définie dans le constructeur, il a toujours une valeur. Ci-dessus des exemples d'utilisation j'ai volontairement ajouté l' Required validateur ainsi, il est donc en synchronisation avec la prudence que j'ai écrit.

Important

Donc, ce validateur va encore travailler sur votre modèle de valeur qui n'est pas obligatoire, mais quand il est présent, il valide (pensez à un champ de texte dans un formulaire web, ce n'est pas obligatoire, mais si un utilisateur entre une valeur, il doit être valide).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X