2009-10-08 8 views

Répondre

3

En ce qui concerne la question/réponse que vous référencez, je suppose qu'il y a du code qui s'exécute dans la couche de données ou dans la classe elle-même qui effectue la validation. Ce code utiliserait Reflection sur l'objet en cours de validation pour rechercher les propriétés avec des attributs différents et exécuter la logique de validation spécifique associée à cet attribut sur cette propriété.

Il pourrait ressembler à quelque chose comme ce qui suit:

public void Validate(object obj) 
{ 
     foreach (var property in obj.GetType().GetProperties()) 
     { 
      var attribute = property.GetCustomAttributes(typeof(ValidationAttribute), false); 
      var validator = ValidationFactory.GetValidator(attribute); 
      validator.Validate(property.GetValue(obj, null)); 
     } 
} 
+0

OK, ça a beaucoup de sens. Je pensais que je manquais un élément crucial mais s'avère que je ne l'étais pas. Dang! :) Merci @tvanfosson – griegs

1

sur Submit (sauf) du formulaire HTML (gagnant formulaire) vous revenez changé la classe client. Pour chaque propriété, vous vérifiez si elle a un attribut personnalisé (hérité de ValidationAttribute ou implémentant l'interface IValiador ou quelque chose comme ça) qui lui est associé. Pour chacune de ces propriétés, vous appelez la méthode validate de l'attribut (créer la classe de validation appropriée et la méthode de validation de l'appel) sur la valeur de la propriété.

+0

+1 Merci pour votre contribution @ Alex. – griegs

1

Vous utilisez la réflexion:

public class MyClass 
{ 
    [Description("I'm an attribute!")] 
    public int MyField; 

    public Attribute GetAttribute(string fieldName) 
    { 
      FieldInfo field = typeof(MyClass).GetField("MyField"); 
      Attribute[] attributes = (Attribute[])field.GetCustomAttributes(typeof(Attribute), false); 

      DescriptionAttribute desc = (DescriptionAttribute)attributes[0]; 
      return desc; 
    } 
} 

Si le membre est attribué un champ, vous pouvez utiliser FieldInfo, tel qu'il est utilisé dans l'exemple. Si c'est une propriété, vous devez utiliser PropertyInfo, les membres de FieldInfo et PropertyInfo sont à peu près les mêmes.

+0

+1 Merci @ darkassassin93. Cela va aussi un long chemin à résoudre le mystère. – griegs