如果在子级上验证失败,则不会在父级上调用IValidatableObject.Validate
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果在子级上验证失败,则不会在父级上调用IValidatableObject.Validate相关的知识,希望对你有一定的参考价值。
我找不到任何关于此的细节,但我遇到的问题是,如果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)
{ ... }
}
如果子级中的验证失败,则父级的Validate函数不会被调用,因此您最终必须首先解决所有子问题然后提交,然后才会看到父级的所有验证失败。
如果有人可以帮助我理解为什么会这样,或者指出一些有关这方面的文件会很棒。
答案
根据this code在GitHub上的2.0.0分支,如果其中一个孩子失败,ValidationVisitor
将停止验证父母。
在最新的dev分支中,他们引入了新的属性ValidateComplexTypesIfChildValidationFails
来控制this behavior。
Github issue与这个问题有关。我不清楚如何设置这个新属性。
在Github上创建了新的issue来跟踪这个问题。
以上是关于如果在子级上验证失败,则不会在父级上调用IValidatableObject.Validate的主要内容,如果未能解决你的问题,请参考以下文章