TryValidateObject and IValidatableObject not starting

I have a simple question (or not).

Why, when I check my object, the code below checks one part in a while.

If DataAnnotations fails, Validate from IValidatableObject is not called. If the DataAnnotations is OK, Validate from IValidatableObject is called.

My question is why? I see no reason for this. Did I miss something?

This is my class (for example):

class Foo : IValidatableObject
{
    [Required]
    public DateTime Date { get; set; }

    public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var errors = new List<ValidationResult>();

        if (Date.Ticks > DateTime.Today.Ticks)
        {
            errors.Add(new ValidationResult("Some error.", new[] { "Date" }));
        }

        return errors;
    }
}

This is my check:

var dto = new Foo();

validationResults = new List<ValidationResult>();
var context = new ValidationContext(dto, null, null);

Validator.TryValidateObject(dto, context, validationResults, true);

// Force
//var model = dto as IValidatableObject;

//if (model != null)
//{
//    validationResults.AddRange(model.Validate(context));
//}
+4
source share

Source: https://habr.com/ru/post/1526533/


All Articles