2012-04-15 3 views
5

Я использую System.ComponentModel.DataAnnotations.CustomValidationAttribute для проверки одного из моих классов POCO, и когда я пытаюсь выполнить его тестирование, он даже не вызывает метод проверки.CustomValidationAttribute указанный метод не называется

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; 
    } 
} 

, но когда я пытаюсь проверить его:

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! 

Он никогда даже шаги в метод пользовательских проверок. Что дает?

ответ

7

Попробуйте использовать перегрузку, которая принимает параметр bool, который указывает, должны ли быть проверены все свойства. Передайте true для последнего параметра.

public static bool TryValidateObject(
    Object instance, 
    ValidationContext validationContext, 
    ICollection<ValidationResult> validationResults, 
    bool validateAllProperties 
) 

Если передать ложные или опустить validateAllProperties только RequiredAttribute будет проверяться. Адрес MSDN documentation.

+0

Это было именно оно. Спасибо. –

Смежные вопросы