2011-03-23 3 views
2

Je validation personnalisée attribut tel que ceci:Le contexte de validation est toujours NULL?

public class MyCustomAttribute : ValidationAttribute { 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) { 
     if ((int)value == 100) { 
      // do some checking to validate & return ValidationResult accordingly 

     } else return ValidationResult.Success; 
    } 
} 

Dans l'usage comme ceci:

[DisplayName("My Custom Property")] 
    [MyCustom(ErrorMessage = "ERROR!!!")] 
    public int? MyCustomProperty { get; set; } 

Ma question est: pourquoi est-ce que l'intérieur MyCustomAttribute, dans la méthode IsValid, ValidationContext est toujours NULL ? Y at-il quelque chose de spécial que je dois définir pour qu'il ne soit pas NULL?

+5

Je me rends compte que vous déclarez que vous êtes, mais ma compréhension est-ce que c'est une fonctionnalité MVC 3.0. Vous êtes absolument sûr que vous êtes sur MVC 3.0? –

+0

Par défaut, il n'y a rien de spécial à faire pour le faire fonctionner. – Buildstarted

+0

OK - pour une raison étrange, il revient à la référence 2.0 (au lieu de coller à la référence 3.0). Je l'ai maintenant fonctionné avec MVC 3.0 (comme prévu). *soupir. –

Répondre

3

si vous utilisez

ValidationResult IsValid(object value, ValidationContext validationContext) 

pour vérifier si les données sont valides, vous devez utiliser

v.GetValidationResult(propertyValue,new ValidationContext(this))!= ValidationResult.Success 

au lieu de

v.IsValid(propertyValue)