старый вопрос, но в любом случае вот ответ:)
Кажется, проблема в том, что ConvertEmptyStringToNull установлен в контексте привязки модели, а не в контексте привязки свойства.
Внутри DefaultModelBinder он вызывает BindProperty для каждого свойства модели и не обрабатывает простые объекты, такие как строки / десятичные числа, вплоть до их собственного вызова BindModel.
К счастью, вместо этого мы можем переопределить GetPropertyValue и установить для этого параметра контекст.
public class EmptyStringModelBinder : DefaultModelBinder
{
protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder)
{
bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
return base.GetPropertyValue(controllerContext, bindingContext, propertyDescriptor, propertyBinder);
}
}
работал для меня:)
[править]
Как указано в комментариях. Эта модель связывателя будет работать только в том случае, если она зарегистрирована, поэтому после добавления класса обязательно вызовите
ModelBinders.Binders.Add(typeof(string), new EmptyStringModelBinder());
в методе Application_Start () файла Global.asax.cs