diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/ValidationVisitor.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/ValidationVisitor.cs index 4e721c5731..494a798537 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/ValidationVisitor.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/ValidationVisitor.cs @@ -29,6 +29,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation private ModelMetadata _metadata; private IValidationStrategy _strategy; + /// + /// Indicates whether validation of a complex type should be performed if validation fails for any of its children. The default behavior is false. + /// + public bool ValidateComplexTypesIfChildValidationFails { get; set; } + /// /// Creates a new . /// @@ -236,7 +241,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation } // Double-checking HasReachedMaxErrors just in case this model has no properties. - if (isValid && !_modelState.HasReachedMaxErrors) + // If validation has failed for any children, only validate the parent if ValidateComplexTypesIfChildValidationFails is true. + if ((isValid || ValidateComplexTypesIfChildValidationFails) && !_modelState.HasReachedMaxErrors) { isValid &= ValidateNode(); }