2012-04-15 19 views
5

Estoy usando System.ComponentModel.DataAnnotations.CustomValidationAttribute para validar una de mis clases de POCO y cuando trato de probarla en una unidad, ni siquiera está llamando al método de validación.Método de CustomValidationAttribute especificado que no se llama

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

pero cuando intento para validarlo:

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! 

It pasos ni siquiera en el método de validación personalizada. ¿Lo que da?

Respuesta

7

Intente utilizar la sobrecarga que requiere un bool que especifique si se deben validar todas las propiedades. Pasa verdadero para el último parámetro.

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

Si pasa falsa u omite los validateAllProperties, sólo el RequiredAttribute se comprobará. Aquí está el MSDN documentation.

+0

Eso fue exactamente. Gracias. –

Cuestiones relacionadas