Quantcast
Channel: ASPNETWebStack Issue Tracker Rss Feed
Viewing all articles
Browse latest Browse all 7215

Commented Unassigned: Model Binding Validation Breaking Change in MVC 5 [1663]

$
0
0
A change in CompositeModelValidator.Validate method breaking some functionality of existing applications.

MVC 4,

```
public override IEnumerable<ModelValidationResult> Validate(object container)
{
bool propertiesValid = true;

foreach (ModelMetadata propertyMetadata in Metadata.Properties)
{
foreach (ModelValidator propertyValidator in propertyMetadata.GetValidators(ControllerContext))
{
foreach (ModelValidationResult propertyResult in propertyValidator.Validate(Metadata.Model))
{
propertiesValid = false;
yield return new ModelValidationResult
{
MemberName = DefaultModelBinder.CreateSubPropertyName(propertyMetadata.PropertyName, propertyResult.MemberName),
Message = propertyResult.Message
};
}
}
}

if (propertiesValid)
{
foreach (ModelValidator typeValidator in Metadata.GetValidators(ControllerContext))
{
foreach (ModelValidationResult typeResult in typeValidator.Validate(container))
{
yield return typeResult;
}
}
}
}
```

MVC 5,

```
public override IEnumerable<ModelValidationResult> Validate(object container)
{
bool propertiesValid = true;

ModelMetadata[] properties = Metadata.PropertiesAsArray;

// Performance sensitive loops
for (int propertyIndex = 0; propertyIndex < properties.Length; propertyIndex++)
{
ModelMetadata propertyMetadata = properties[propertyIndex];
foreach (ModelValidator propertyValidator in propertyMetadata.GetValidators(ControllerContext))
{
foreach (ModelValidationResult propertyResult in propertyValidator.Validate(Metadata.Model))
{
propertiesValid = false;
yield return CreateSubPropertyResult(propertyMetadata, propertyResult);
}
}
}

if (propertiesValid)
{
foreach (ModelValidator typeValidator in Metadata.GetValidators(ControllerContext))
{
foreach (ModelValidationResult typeResult in typeValidator.Validate(container))
{
yield return typeResult;
}
}
}
}
```

Pre MVC 5 calling the property getter again before triggering validation. But MVC 5 doesn't. For detail please see,
http://forums.asp.net/t/1962641.aspx?Data+annotation+model+validation+in+MVC5+different+than+in+MVC3
Comments: @yishai, Sorry for wrong link. The correct link is http://forums.asp.net/t/1962641.aspx?Data+annotation+model+validation+in+MVC5+different+than+in+MVC3

Viewing all articles
Browse latest Browse all 7215

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>