2010-11-07 13 views
4

Je suis en train de créer un attribut de validation de longueur minimale qui obligera les utilisateurs à saisir le montant minimum spécifié de caractères dans une zone de texteComment obtenir le nom d'affichage de la propriété d'un attribut personnalisé

public sealed class MinimumLengthAttribute : ValidationAttribute 
     { 
      public int MinLength { get; set; } 

      public MinimumLengthAttribute(int minLength) 
      { 
       MinLength = minLength; 
      } 

      public override bool IsValid(object value) 
      { 
       if (value == null) 
       { 
        return true; 
       } 
       string valueAsString = value as string; 
       return (valueAsString != null && valueAsString.Length >= MinLength); 

    } 
    } 

Dans le constructeur de la MinimumLengthAttribute Je voudrais définir le message d'erreur comme suit:

ErrorMessage = « {0} doit être atleast {1} caractères »

Comment puis-je obtenir le nom d'affichage de la propriété afin que je puisse remplir le { 0} espace réservé?

+0

Essayez-vous d'éviter d'utiliser la propriété ErrorMessage lors de l'affectation de l'attribut? like: MinimumLength (ErrorMessage = "L'adresse e-mail doit comporter au moins 5 caractères") –

+0

Oui J'essaie d'éviter de définir le message d'erreur lors de l'affectation de l'attribut. – Kumar

Répondre

2

Si votre message d'erreur a plus d'un espace réservé, ils votre attribut doit également remplacer la méthode FormatErrorMessage comme ceci:

public override string FormatErrorMessage(string name) { 
    return String.Format(ErrorMessageString, name, MinLength); 
} 

Et vous devez appeler l'une des surcharges de constructeur à specfiy message d'erreur par défaut de votre attribut:

public MinimumLengthAttribute() 
    : base("{0} must be at least {1} characters long") { 
} 
+0

La surévaluation de la méthode FormatErrorMessage ne fonctionne que sur la validation côté serveur, mais elle ne fonctionne pas du côté client. Il serait donc idéal de définir la propriété ErrprMessage. – Kumar

5

l'espace réservé {0} est automatiquement renseigné avec la valeur pour [Display(Name="<value>")] et si l'attribut [Display(Name="")] n'existe pas, il prendra la Nom de la propriété.