跨站点将DisplayFormatAttribute.ConvertEmptyStringToNull的默认值设置为false

时间:2011-09-18 04:56:24

标签: asp.net-mvc

属性DisplayFormatAttribute.ConvertEmptyStringToNull的默认值为true。我想将它默认为整个网站的假(或者通过类或页面也是好的)。有没有办法可以做到这一点,所以我不需要用:

来装饰每个测试表单字段
[DisplayFormat(ConvertEmptyStringToNull=false)]

1 个答案:

答案 0 :(得分:15)

您可以像这样创建自己的自定义模型元数据提供程序:

public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata CreateMetadata(IEnumerable<System.Attribute> attributes, System.Type containerType, System.Func<object> modelAccessor, System.Type modelType, string propertyName)
    {
        var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
        if (string.IsNullOrEmpty(propertyName)) return modelMetadata;

        if (modelType == typeof(String))
                modelMetadata.ConvertEmptyStringToNull = false;

        return modelMetadata;           
    }
}

然后在app_start中注册:

ModelMetadataProviders.Current = new CustomModelMetadataProvider();