Более чистой альтернативой является предоставление пользовательского ModelMetadataProvider вместо создания ModelBinder, который изменяет ModelMetadata.
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();