2011-03-16 42 views

回答

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(); 

並且你去了,沒有更多的空字符串。

4

myProperty的{{返回myProperty的? 「」}}

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(); 
相關問題