有没有办法可以在Model中将默认值设置为Empty.string。
我在数据库中的一个列名为not not null字段,默认值为Empty.string
有什么方法可以在此列的模型中设置此默认属性?
由于
答案 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();