CR feedback from [ModelBinderAttribute]
This commit is contained in:
parent
f94bd53464
commit
ca714c5149
|
|
@ -37,8 +37,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets (or sets in subclasses) <see cref="IEnumerable{IBinderTypeProviderMetadata}"/> found in collection passed
|
||||
/// to the <see cref="CachedDataAnnotationsMetadataAttributes(IEnumerable{object})"/> constructor, if any.
|
||||
/// Gets (or sets in subclasses) <see cref="IEnumerable{IBinderTypeProviderMetadata}"/> found in collection
|
||||
/// passed to the <see cref="CachedDataAnnotationsMetadataAttributes(IEnumerable{object})"/> constructor,
|
||||
/// if any.
|
||||
/// </summary>
|
||||
public IEnumerable<IBinderTypeProviderMetadata> BinderTypeProviders { get; set; }
|
||||
|
||||
|
|
|
|||
|
|
@ -39,9 +39,6 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
{
|
||||
if (PrototypeCache.BinderTypeProviders != null)
|
||||
{
|
||||
// The need for fallback here is to handle cases where a model binder is specified
|
||||
// on a type and on a parameter to an action.
|
||||
//
|
||||
// We want to respect the value set by the parameter (if any), and use the value specifed
|
||||
// on the type as a fallback.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
|
|||
|
||||
// Act
|
||||
var response = await client.PostAsync("http://localhost/Home/GetCustomer?Id=1234", content);
|
||||
|
||||
|
||||
// Assert
|
||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||
var customer = JsonConvert.DeserializeObject<Customer>(
|
||||
|
|
|
|||
|
|
@ -86,12 +86,31 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
var result = cache.PropertyBindingInfo.ToArray();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(propertyBindingInfos.Length, result.Length);
|
||||
for (var index = 0; index < propertyBindingInfos.Length; index++)
|
||||
{
|
||||
Assert.Same(propertyBindingInfos[index], result[index]);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_FindsBinderTypeProviders()
|
||||
{
|
||||
// Arrange
|
||||
var providers = new[] { new TestBinderTypeProvider(), new TestBinderTypeProvider() };
|
||||
|
||||
// Act
|
||||
var cache = new CachedDataAnnotationsMetadataAttributes(providers);
|
||||
var result = cache.BinderTypeProviders.ToArray();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(providers.Length, result.Length);
|
||||
for (var index = 0; index < providers.Length; index++)
|
||||
{
|
||||
Assert.Same(providers[index], result[index]);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_FindsDisplayFormat_FromDataType()
|
||||
{
|
||||
|
|
@ -123,5 +142,10 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
// Assert
|
||||
Assert.Same(displayFormat, result);
|
||||
}
|
||||
|
||||
private class TestBinderTypeProvider : IBinderTypeProviderMetadata
|
||||
{
|
||||
public Type BinderType { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -52,6 +52,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
|
||||
Assert.Null(metadata.BinderModelName);
|
||||
Assert.Null(metadata.BinderMetadata);
|
||||
Assert.Null(metadata.BinderType);
|
||||
Assert.Empty(metadata.BinderIncludeProperties);
|
||||
Assert.Null(metadata.BinderExcludeProperties);
|
||||
}
|
||||
|
|
@ -399,6 +400,79 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
Assert.Null(metadata.EditFormatString);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_FindsBinderTypeProviders_Null()
|
||||
{
|
||||
// Arrange
|
||||
var provider = new DataAnnotationsModelMetadataProvider();
|
||||
|
||||
var binderProviders = new[] { new TestBinderTypeProvider(), new TestBinderTypeProvider() };
|
||||
|
||||
// Act
|
||||
var metadata = new CachedDataAnnotationsModelMetadata(
|
||||
provider,
|
||||
containerType: null,
|
||||
modelType: typeof(object),
|
||||
propertyName: null,
|
||||
attributes: binderProviders);
|
||||
|
||||
// Assert
|
||||
Assert.Null(metadata.BinderType);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_FindsBinderTypeProviders_Fallback()
|
||||
{
|
||||
// Arrange
|
||||
var provider = new DataAnnotationsModelMetadataProvider();
|
||||
|
||||
var binderProviders = new[]
|
||||
{
|
||||
new TestBinderTypeProvider(),
|
||||
new TestBinderTypeProvider() { BinderType = typeof(string) }
|
||||
};
|
||||
|
||||
// Act
|
||||
var metadata = new CachedDataAnnotationsModelMetadata(
|
||||
provider,
|
||||
containerType: null,
|
||||
modelType: typeof(object),
|
||||
propertyName: null,
|
||||
attributes: binderProviders);
|
||||
|
||||
// Assert
|
||||
Assert.Same(typeof(string), metadata.BinderType);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Constructor_FindsBinderTypeProviders_FirstAttributeHasPrecedence()
|
||||
{
|
||||
// Arrange
|
||||
var provider = new DataAnnotationsModelMetadataProvider();
|
||||
|
||||
var binderProviders = new[]
|
||||
{
|
||||
new TestBinderTypeProvider() { BinderType = typeof(int) },
|
||||
new TestBinderTypeProvider() { BinderType = typeof(string) }
|
||||
};
|
||||
|
||||
// Act
|
||||
var metadata = new CachedDataAnnotationsModelMetadata(
|
||||
provider,
|
||||
containerType: null,
|
||||
modelType: typeof(object),
|
||||
propertyName: null,
|
||||
attributes: binderProviders);
|
||||
|
||||
// Assert
|
||||
Assert.Same(typeof(int), metadata.BinderType);
|
||||
}
|
||||
|
||||
private class TestBinderTypeProvider : IBinderTypeProviderMetadata
|
||||
{
|
||||
public Type BinderType { get; set; }
|
||||
}
|
||||
|
||||
private class DataTypeWithCustomDisplayFormat : DataTypeAttribute
|
||||
{
|
||||
public DataTypeWithCustomDisplayFormat() : base("Custom datatype")
|
||||
|
|
|
|||
|
|
@ -54,6 +54,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
{ m => m.BinderModelName = null, m => m.BinderModelName, null },
|
||||
{ m => m.BinderModelName = "newModelName", m => m.BinderModelName, "newModelName" },
|
||||
{ m => m.BinderModelName = string.Empty, m => m.BinderModelName, string.Empty },
|
||||
{ m => m.BinderType = null, m => m.BinderType, null },
|
||||
{ m => m.BinderType = typeof(string), m => m.BinderType, typeof(string) },
|
||||
{ m => m.BinderIncludeProperties = null, m => m.BinderIncludeProperties, null },
|
||||
{
|
||||
m => m.BinderIncludeProperties = emptyPropertyList,
|
||||
|
|
@ -124,6 +126,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
|||
Assert.Equal(ModelMetadata.DefaultOrder, metadata.Order);
|
||||
|
||||
Assert.Null(metadata.BinderModelName);
|
||||
Assert.Null(metadata.BinderType);
|
||||
Assert.Null(metadata.BinderMetadata);
|
||||
Assert.Null(metadata.BinderIncludeProperties);
|
||||
Assert.Null(metadata.BinderExcludeProperties);
|
||||
|
|
|
|||
Loading…
Reference in New Issue