public void Validate([NotNull] ModelValidationContext validationContext, ModelValidationNode parentNode) { if (SuppressValidation) { // no-op return; } // pre-validation steps var validatingEventArgs = new ModelValidatingEventArgs(validationContext, parentNode); OnValidating(validatingEventArgs); if (validatingEventArgs.Cancel) { return; } ValidateChildren(validationContext); ValidateThis(validationContext, parentNode); // post-validation steps var validatedEventArgs = new ModelValidatedEventArgs(validationContext, parentNode); OnValidated(validatedEventArgs); var modelState = validationContext.ModelState; if (modelState.GetFieldValidationState(ModelStateKey) != ModelValidationState.Invalid) { // If a node or its subtree were not marked invalid, we can consider it valid at this point. modelState.MarkFieldValid(ModelStateKey); } }
private void OnValidated(ModelValidatedEventArgs e) { if (Validated != null) { Validated(this, e); } }
public void Validate([NotNull] ModelValidationContext validationContext, ModelValidationNode parentNode) { if (SuppressValidation || !validationContext.ModelState.CanAddErrors) { // Short circuit if validation does not need to be applied or if we've reached the max number of // validation errors. return; } // pre-validation steps var validatingEventArgs = new ModelValidatingEventArgs(validationContext, parentNode); OnValidating(validatingEventArgs); if (validatingEventArgs.Cancel) { return; } ValidateChildren(validationContext); ValidateThis(validationContext, parentNode); // post-validation steps var validatedEventArgs = new ModelValidatedEventArgs(validationContext, parentNode); OnValidated(validatedEventArgs); var modelState = validationContext.ModelState; if (modelState.GetFieldValidationState(ModelStateKey) != ModelValidationState.Invalid) { // If a node or its subtree were not marked invalid, we can consider it valid at this point. modelState.MarkFieldValid(ModelStateKey); } }
public void NullCheckFailedHandler_ModelStateValid_AddsErrorString() { // Arrange var modelState = new ModelStateDictionary(); var modelMetadata = GetMetadataForType(typeof(Person)); var validationNode = new ModelValidationNode(modelMetadata, "foo"); var validationContext = new ModelValidationContext(new DataAnnotationsModelMetadataProvider(), Mock.Of <IModelValidatorProvider>(), modelState, modelMetadata, null); var e = new ModelValidatedEventArgs(validationContext, parentNode: null); // Act var handler = MutableObjectModelBinder.CreateNullCheckFailedHandler(modelMetadata, incomingValue: null); handler(validationNode, e); // Assert Assert.True(modelState.ContainsKey("foo")); Assert.Equal("A value is required.", modelState["foo"].Errors[0].ErrorMessage); }
public void NullCheckFailedHandler_ModelStateAlreadyInvalid_DoesNothing() { // Arrange var modelState = new ModelStateDictionary(); modelState.AddModelError("foo.bar", "Some existing error."); var modelMetadata = GetMetadataForType(typeof(Person)); var validationNode = new ModelValidationNode(modelMetadata, "foo"); var validationContext = new ModelValidationContext(new DataAnnotationsModelMetadataProvider(), Mock.Of <IModelValidatorProvider>(), modelState, modelMetadata, null); var e = new ModelValidatedEventArgs(validationContext, parentNode: null); // Act var handler = MutableObjectModelBinder.CreateNullCheckFailedHandler(modelMetadata, incomingValue: null); handler(validationNode, e); // Assert Assert.False(modelState.ContainsKey("foo")); }
public void NullCheckFailedHandler_ModelStateValid_AddsErrorString() { // Arrange var modelState = new ModelStateDictionary(); var modelMetadata = GetMetadataForType(typeof(Person)); var validationNode = new ModelValidationNode(modelMetadata, "foo"); var validationContext = new ModelValidationContext(new DataAnnotationsModelMetadataProvider(), Enumerable.Empty<IModelValidatorProvider>(), modelState, modelMetadata, null); var e = new ModelValidatedEventArgs(validationContext, parentNode: null); // Act var handler = MutableObjectModelBinder.CreateNullCheckFailedHandler(modelMetadata, incomingValue: null); handler(validationNode, e); // Assert Assert.True(modelState.ContainsKey("foo")); Assert.Equal("A value is required.", modelState["foo"].Errors[0].ErrorMessage); }
public void NullCheckFailedHandler_ModelStateAlreadyInvalid_DoesNothing() { // Arrange var modelState = new ModelStateDictionary(); modelState.AddModelError("foo.bar", "Some existing error."); var modelMetadata = GetMetadataForType(typeof(Person)); var validationNode = new ModelValidationNode(modelMetadata, "foo"); var validationContext = new ModelValidationContext(new DataAnnotationsModelMetadataProvider(), Enumerable.Empty<IModelValidatorProvider>(), modelState, modelMetadata, null); var e = new ModelValidatedEventArgs(validationContext, parentNode: null); // Act var handler = MutableObjectModelBinder.CreateNullCheckFailedHandler(modelMetadata, incomingValue: null); handler(validationNode, e); // Assert Assert.False(modelState.ContainsKey("foo")); }