2012-04-15 26 views
5

Używam System.ComponentModel.DataAnnotations.CustomValidationAttribute do sprawdzania poprawności jednej z moich klas POCO i kiedy próbuję ją przetestować, nie wywołuje ona nawet metody sprawdzania poprawności.Metoda specyficzna CustomValidationAttribute nie jest wywoływana

public class Foo 
{ 
    [Required] 
    public string SomethingRequired { get; set } 
    [CustomValidation(typeof(Foo), "ValidateBar")] 
    public int? Bar { get; set; } 
    public string Fark { get; set; } 

    public static ValidationResult ValidateBar(int? v, ValidationContext context) { 
    var foo = context.ObjectInstance as Foo; 
    if(!v.HasValue && String.IsNullOrWhiteSpace(foo.Fark)) { 
     return new ValidationResult("Either Bar or Fark must have something in them."); 
    } 
    return ValidationResult.Success; 
    } 
} 

ale gdy próbuję go zweryfikować:

var foo = new Foo { 
    SomethingRequired = "okay" 
}; 
var validationContext = new ValidationContext(foo, null, null); 
var validationResults = new List<ValidationResult>(); 
bool isvalid = Validator.TryValidateObject(foo, validationContext, validationResults); 
Assert.IsFalse(isvalid); //FAIL!!! It's valid when it shouldn't be! 

nigdy nawet kroków w sposób niestandardowy walidacji. Co daje?

Odpowiedz

7

Spróbuj użyć przeciążenia, które przyjmuje wartość bool, która określa, czy wszystkie właściwości powinny zostać sprawdzone. Podaj wartość true dla ostatniego parametru.

Jeśli przekażemy wartość false lub pominiemy właściwość validateAllProperties, tylko RequiredAttribute będzie zaznaczona. Jest to MSDN documentation.

+0

To było dokładnie to. Dziękuję Ci. –

Powiązane problemy