如果在子级上验证失败,则不会在父级上调用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的主要内容,如果未能解决你的问题,请参考以下文章

React,是不是在父级上渲染会使子级重新渲染?

来自父级的 TextField 默认值未在子级上呈现

悬停在子级上而对父级没有悬停效果[重复]

nHibernate 保存一对多

Swift 3.0 如何在 Firebase 中的父级上添加子级

即使没有悬停在父级上,子元素也会出现