Correct code checking for `ViewDataDictionary.ModelMetadata==null`

- `null` checks can generally be removed but in one case needed to
  special-case metadata for `object`

nit: remove duplicate empty `string` check in
`ExpressionMetadataProvider.FromStringExpression()`
This commit is contained in:
Doug Bunting 2014-10-25 15:00:41 -07:00
parent e73655229c
commit 97aaa7049e
2 changed files with 20 additions and 18 deletions

View File

@ -83,12 +83,7 @@ namespace Microsoft.AspNet.Mvc.Rendering.Expressions
{
if (string.IsNullOrEmpty(expression))
{
return viewData.ModelMetadata;
}
if (expression.Length == 0)
{
// Empty string really means "model metadata for the current model"
// Empty string really means "ModelMetadata for the current model".
return FromModel(viewData, metadataProvider);
}
@ -118,7 +113,7 @@ namespace Microsoft.AspNet.Mvc.Rendering.Expressions
modelType = viewDataInfo.Value.GetType();
}
}
else if (viewData.ModelMetadata != null)
else
{
// Try getting a property from ModelMetadata if we couldn't find an answer in ViewData
var propertyMetadata =
@ -136,8 +131,20 @@ namespace Microsoft.AspNet.Mvc.Rendering.Expressions
private static ModelMetadata FromModel([NotNull] ViewDataDictionary viewData,
IModelMetadataProvider metadataProvider)
{
return viewData.ModelMetadata ?? GetMetadataFromProvider(null, typeof(string), propertyName: null,
containerType: null, metadataProvider: metadataProvider);
if (viewData.ModelMetadata.ModelType == typeof(object))
{
// Use common simple type rather than object so e.g. Editor() at least generates a TextBox.
return GetMetadataFromProvider(
modelAccessor: null,
modelType: typeof(string),
propertyName: null,
containerType: null,
metadataProvider: metadataProvider);
}
else
{
return viewData.ModelMetadata;
}
}
// An IModelMetadataProvider is not required unless this method is called. Therefore other methods in this

View File

@ -48,16 +48,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
else
{
var metadata = viewData.ModelMetadata;
if (metadata != null)
{
var orderer = new ErrorsOrderer(metadata);
var orderer = new ErrorsOrderer(metadata);
return viewData.ModelState
.OrderBy(data => orderer.GetOrder(data.Key))
.Select(ms => ms.Value);
}
return viewData.ModelState.Values;
return viewData.ModelState
.OrderBy(data => orderer.GetOrder(data.Key))
.Select(ms => ms.Value);
}
}