如何在asp.net mvc应用程序的模型中将默认值设置为空字符串

时间:2011-03-16 20:43:09

标签: asp.net asp.net-mvc asp.net-mvc-2

有没有办法可以在Model中将默认值设置为Empty.string。

我在数据库中的一个列名为not not null字段,默认值为Empty.string

有什么方法可以在此列的模型中设置此默认属性?

由于

3 个答案:

答案 0 :(得分:13)

有一个设置可以通过覆盖默认模型绑定器进行配置,如下所示:

public sealed class EmptyStringModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
        return base.BindModel(controllerContext, bindingContext);
    }
}

然后将此配置为global.asax中的应用程序启动时的默认模型绑定器:

ModelBinders.Binders.DefaultBinder = new EmptyStringModelBinder();

然后你去了,没有更多的空字符串。

答案 1 :(得分:4)

MyProperty {get{return myProperty??""}}

答案 2 :(得分:0)

更清晰的替代方法是提供自定义ModelMetadataProvider,而不是创建修改ModelMetadata的ModelBinder。

public class EmptyStringDataAnnotationsModelMetadataProvider : System.Web.Mvc.DataAnnotationsModelMetadataProvider 
{
    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
        modelMetadata.ConvertEmptyStringToNull = false;
        return modelMetadata;
    }
}

然后在Application_Start()

ModelMetadataProviders.Current = new EmptyStringDataAnnotationsModelMetadataProvider();