Change IsValid method in ModelStateDictionary to GetValidationState
Fixes #400
This commit is contained in:
parent
1adcf14b3d
commit
a834928f1a
|
|
@ -116,8 +116,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
{
|
||||
var validationNode = (ModelValidationNode)sender;
|
||||
var modelState = e.ValidationContext.ModelState;
|
||||
var validationState = modelState.GetFieldValidationState(validationNode.ModelStateKey);
|
||||
|
||||
if (modelState.IsValidField(validationNode.ModelStateKey) == null)
|
||||
if (validationState == ModelValidationState.Unvalidated)
|
||||
{
|
||||
// TODO: Revive ModelBinderConfig
|
||||
// string errorMessage = ModelBinderConfig.ValueRequiredErrorMessageProvider(e.ValidationContext, modelMetadata, incomingValue);
|
||||
|
|
@ -270,7 +271,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
if (value == null)
|
||||
{
|
||||
var modelStateKey = dtoResult.ValidationNode.ModelStateKey;
|
||||
if (bindingContext.ModelState.IsValidField(modelStateKey) == null)
|
||||
var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
|
||||
if (validationState == ModelValidationState.Unvalidated)
|
||||
{
|
||||
if (requiredValidator != null)
|
||||
{
|
||||
|
|
@ -299,7 +301,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
ex = targetInvocationException.InnerException;
|
||||
}
|
||||
var modelStateKey = dtoResult.ValidationNode.ModelStateKey;
|
||||
if (bindingContext.ModelState.IsValidField(modelStateKey) == null)
|
||||
var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
|
||||
if (validationState == ModelValidationState.Unvalidated)
|
||||
{
|
||||
bindingContext.ModelState.AddModelError(modelStateKey, ex);
|
||||
}
|
||||
|
|
@ -309,7 +312,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
{
|
||||
// trying to set a non-nullable value type to null, need to make sure there's a message
|
||||
var modelStateKey = dtoResult.ValidationNode.ModelStateKey;
|
||||
if (bindingContext.ModelState.IsValidField(modelStateKey) == null)
|
||||
var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
|
||||
if (validationState == ModelValidationState.Unvalidated)
|
||||
{
|
||||
dtoResult.ValidationNode.Validated += CreateNullCheckFailedHandler(propertyMetadata, value);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,21 +89,15 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
modelState.Errors.Add(errorMessage);
|
||||
}
|
||||
|
||||
public bool? IsValidField([NotNull] string key)
|
||||
public ModelValidationState GetFieldValidationState([NotNull] string key)
|
||||
{
|
||||
var entries = DictionaryHelper.FindKeysWithPrefix(this, key);
|
||||
if (!entries.Any())
|
||||
{
|
||||
return null;
|
||||
return ModelValidationState.Unvalidated;
|
||||
}
|
||||
|
||||
var validity = GetValidity(entries);
|
||||
if (validity == ModelValidationState.Unvalidated)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return validity == ModelValidationState.Valid;
|
||||
return GetValidity(entries);
|
||||
}
|
||||
|
||||
public void MarkFieldValid([NotNull] string key)
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
OnValidated(validatedEventArgs);
|
||||
|
||||
var modelState = validationContext.ModelState;
|
||||
if (modelState.IsValidField(ModelStateKey) != false)
|
||||
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);
|
||||
|
|
@ -159,7 +159,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
// else we could end up with duplicate or irrelevant error messages.
|
||||
var propertyKeyRoot = ModelBindingHelper.CreatePropertyModelName(ModelStateKey, propertyMetadata.PropertyName);
|
||||
|
||||
if (modelState.IsValidField(propertyKeyRoot) == null)
|
||||
if (modelState.GetFieldValidationState(propertyKeyRoot) == ModelValidationState.Unvalidated)
|
||||
{
|
||||
var propertyValidators = GetValidators(validationContext, propertyMetadata);
|
||||
var propertyValidationContext = new ModelValidationContext(validationContext, propertyMetadata);
|
||||
|
|
@ -178,7 +178,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
private void ValidateThis(ModelValidationContext validationContext, ModelValidationNode parentNode)
|
||||
{
|
||||
var modelState = validationContext.ModelState;
|
||||
if (modelState.IsValidField(ModelStateKey) == false)
|
||||
if (modelState.GetFieldValidationState(ModelStateKey) == ModelValidationState.Invalid)
|
||||
{
|
||||
// If any item in the key's subtree has been identified as invalid, short-circuit
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -63,48 +63,48 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void IsValidFieldReturnsNullIfDictionaryDoesNotContainKey()
|
||||
public void GetFieldValidationState_ReturnsUnvalidatedIfDictionaryDoesNotContainKey()
|
||||
{
|
||||
// Arrange
|
||||
var msd = new ModelStateDictionary();
|
||||
|
||||
// Act
|
||||
var isValid = msd.IsValidField("foo");
|
||||
var validationState = msd.GetFieldValidationState("foo");
|
||||
|
||||
// Assert
|
||||
Assert.Null(isValid);
|
||||
Assert.Equal(ModelValidationState.Unvalidated, validationState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsValidFieldReturnsFalseIfKeyChildContainsErrors()
|
||||
public void GetFieldValidationState_ReturnsInvalidIfKeyChildContainsErrors()
|
||||
{
|
||||
// Arrange
|
||||
var msd = new ModelStateDictionary();
|
||||
msd.AddModelError("foo.bar", "error text");
|
||||
|
||||
// Act
|
||||
var isValid = msd.IsValidField("foo");
|
||||
var validationState = msd.GetFieldValidationState("foo");
|
||||
|
||||
// Assert
|
||||
Assert.Equal(false, isValid);
|
||||
Assert.Equal(ModelValidationState.Invalid, validationState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsValidFieldReturnsFalseIfKeyContainsErrors()
|
||||
public void GetFieldValidationState_ReturnsInvalidIfKeyContainsErrors()
|
||||
{
|
||||
// Arrange
|
||||
var msd = new ModelStateDictionary();
|
||||
msd.AddModelError("foo", "error text");
|
||||
|
||||
// Act
|
||||
var isValid = msd.IsValidField("foo");
|
||||
var validationState = msd.GetFieldValidationState("foo");
|
||||
|
||||
// Assert
|
||||
Assert.Equal(false, isValid);
|
||||
Assert.Equal(ModelValidationState.Invalid, validationState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsValidFieldReturnsTrueIfModelStateDoesNotContainErrors()
|
||||
public void GetFieldValidationState_ReturnsValidIfModelStateDoesNotContainErrors()
|
||||
{
|
||||
// Arrange
|
||||
var validState = new ModelState
|
||||
|
|
@ -118,10 +118,10 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
};
|
||||
|
||||
// Act
|
||||
var isValid = msd.IsValidField("foo");
|
||||
var validationState = msd.GetFieldValidationState("foo");
|
||||
|
||||
// Assert
|
||||
Assert.Equal(true, isValid);
|
||||
Assert.Equal(ModelValidationState.Valid, validationState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -288,10 +288,10 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
dictionary.SetModelValue("user.Name", GetValueProviderResult());
|
||||
|
||||
// Act
|
||||
var isValidField = dictionary.IsValidField("not-user");
|
||||
var validationState = dictionary.GetFieldValidationState("not-user");
|
||||
|
||||
// Assert
|
||||
Assert.Equal(null, isValidField);
|
||||
Assert.Equal(ModelValidationState.Unvalidated, validationState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -304,10 +304,10 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
dictionary.AddModelError("user.Age", "Age is not a valid int");
|
||||
|
||||
// Act
|
||||
var isValidField = dictionary.IsValidField("user");
|
||||
var validationState = dictionary.GetFieldValidationState("user");
|
||||
|
||||
// Assert
|
||||
Assert.Equal(null, isValidField);
|
||||
Assert.Equal(ModelValidationState.Unvalidated, validationState);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -322,10 +322,10 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
dictionary.AddModelError("user.Age", "Age is not a valid int");
|
||||
|
||||
// Act
|
||||
var isValidField = dictionary.IsValidField(key);
|
||||
var validationState = dictionary.GetFieldValidationState(key);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(false, isValidField);
|
||||
Assert.Equal(ModelValidationState.Invalid, validationState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -337,10 +337,10 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
dictionary["user.Name"] = new ModelState { ValidationState = ModelValidationState.Valid };
|
||||
|
||||
// Act
|
||||
var isValidField = dictionary.IsValidField("user");
|
||||
var validationState = dictionary.GetFieldValidationState("user");
|
||||
|
||||
// Assert
|
||||
Assert.Equal(true, isValidField);
|
||||
Assert.Equal(ModelValidationState.Valid, validationState);
|
||||
}
|
||||
|
||||
private static ValueProviderResult GetValueProviderResult(object rawValue = null, string attemptedValue = null)
|
||||
|
|
|
|||
Loading…
Reference in New Issue