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

时间:2018-03-06 03:38:00

标签: c# asp.net-core asp.net-core-mvc

我无法找到关于此的任何细节,但我遇到的问题是如果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)
    { ... } 
}

如果孩子的验证失败,那么父母的验证功能就不会被调用,所以你最终必须首先修复所有子问题,然后提交,然后才能看到所有的验证失败。父节点。

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

1 个答案:

答案 0 :(得分:5)

根据this code在GitHub ValidationVisitor上的2.0.0分支,如果其中一个孩子失败,将停止验证父母。

在最新的dev分支中,他们引入了新属性ValidateComplexTypesIfChildValidationFails来控制this behavior

Github issue与此问题相关。我不清楚如何设置这个新属性。

在Github上创建了新的issue来跟踪此问题。