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)) if (string.IsNullOrEmpty(expression))
{ {
return viewData.ModelMetadata; // Empty string really means "ModelMetadata for the current model".
}
if (expression.Length == 0)
{
// Empty string really means "model metadata for the current model"
return FromModel(viewData, metadataProvider); return FromModel(viewData, metadataProvider);
} }
@ -118,7 +113,7 @@ namespace Microsoft.AspNet.Mvc.Rendering.Expressions
modelType = viewDataInfo.Value.GetType(); 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 // Try getting a property from ModelMetadata if we couldn't find an answer in ViewData
var propertyMetadata = var propertyMetadata =
@ -136,8 +131,20 @@ namespace Microsoft.AspNet.Mvc.Rendering.Expressions
private static ModelMetadata FromModel([NotNull] ViewDataDictionary viewData, private static ModelMetadata FromModel([NotNull] ViewDataDictionary viewData,
IModelMetadataProvider metadataProvider) IModelMetadataProvider metadataProvider)
{ {
return viewData.ModelMetadata ?? GetMetadataFromProvider(null, typeof(string), propertyName: null, if (viewData.ModelMetadata.ModelType == typeof(object))
containerType: null, metadataProvider: metadataProvider); {
// 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 // 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 else
{ {
var metadata = viewData.ModelMetadata; var metadata = viewData.ModelMetadata;
if (metadata != null) var orderer = new ErrorsOrderer(metadata);
{
var orderer = new ErrorsOrderer(metadata);
return viewData.ModelState return viewData.ModelState
.OrderBy(data => orderer.GetOrder(data.Key)) .OrderBy(data => orderer.GetOrder(data.Key))
.Select(ms => ms.Value); .Select(ms => ms.Value);
}
return viewData.ModelState.Values;
} }
} }