Fix bug# 289
The ordering algorithm was ignoring errors that came from user code, and only respected errors from model properties
This commit is contained in:
parent
8d53d40647
commit
3636440cae
|
|
@ -42,25 +42,44 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Sort modelStates to respect the ordering in the metadata.
|
|
||||||
// ModelState doesn't refer to ModelMetadata, but we can correlate via the property name.
|
|
||||||
var ordering = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
|
||||||
|
|
||||||
var metadata = viewData.ModelMetadata;
|
var metadata = viewData.ModelMetadata;
|
||||||
if (metadata != null)
|
if (metadata != null)
|
||||||
{
|
{
|
||||||
foreach (var data in metadata.Properties)
|
var orderer = new ErrorsOrderer(metadata);
|
||||||
{
|
|
||||||
ordering[data.PropertyName] = data.Order;
|
|
||||||
}
|
|
||||||
|
|
||||||
return viewData.ModelState
|
return viewData.ModelState
|
||||||
.OrderBy(data => ordering[data.Key])
|
.OrderBy(data => orderer.GetOrder(data.Key))
|
||||||
.Select(ms => ms.Value);
|
.Select(ms => ms.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return viewData.ModelState.Values;
|
return viewData.ModelState.Values;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper for sorting modelStates to respect the ordering in the metadata.
|
||||||
|
// ModelState doesn't refer to ModelMetadata, but we can correlate via the property name.
|
||||||
|
private class ErrorsOrderer
|
||||||
|
{
|
||||||
|
private Dictionary<string, int> _ordering = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
public ErrorsOrderer([NotNull] ModelMetadata metadata)
|
||||||
|
{
|
||||||
|
foreach (var data in metadata.Properties)
|
||||||
|
{
|
||||||
|
_ordering[data.PropertyName] = data.Order;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetOrder(string key)
|
||||||
|
{
|
||||||
|
int value;
|
||||||
|
if (_ordering.TryGetValue(key, out value))
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ModelMetadata.DefaultOrder;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue