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))
|
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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue