CustomValidationAttribute specifed method not being called

c#, data-annotations, validation

Solution

Try using the overload that takes a bool that specifies if all properties should be validated. Pass true for the last parameter.

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

If you pass false or omit the validateAllProperties, only the RequiredAttribute will be checked. Here is the MSDN documentation.

Problem

I'm using the System.ComponentModel.DataAnnotations.CustomValidationAttribute to validate one of my POCO classes and when I try to unit test it, it's not even calling the validation method. ``` 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; } } ``` but when I try to validate it: ``` 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 never even steps into the custom validation method. What gives?

Original source