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:
parent
e73655229c
commit
97aaa7049e
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue