如果在子级上验证失败,则不会在父级上调用IValidatableObject.Validate

Hei*_*ich 0 c# asp.net-core-mvc asp.net-core

我找不到任何关于此的细节,但我遇到的问题是,如果Validate调用在任何子属性上失败,则不会调用父对象的Validate函数.简单场景如下:

public class Child : IValidateObject 
{
    public IEnumerable<ValidationResult> Validate(ValidationContext  validationContext)
    { ... } 
}

public class Parent : IValidatableObject
{ 
    public Child Child { get; set;}
    public IEnumerable<ValidationResult> Validate(ValidationContext  validationContext)
    { ... } 
}
Run Code Online (Sandbox Code Playgroud)

如果子级中的验证失败,则父级的Validate函数不会被调用,因此您最终必须首先解决所有子问题然后提交,然后才会看到父级的所有验证失败.

如果有人可以帮助我理解为什么会这样,或者指出一些有关这方面的文件会很棒.

Mkr*_*yan 5

根据这个代码,在GitHub的2.0.0分支中,ValidationVisitor如果其中一个孩子失败,将停止验证父级.

在最新的dev分支中,他们引入了新属性ValidateComplexTypesIfChildValidationFails来控制这种行为.

Github问题与此问题有关.我不清楚如何设置这个新属性.

在Github上创建了新问题来跟踪此问题.