Пользовательский ModelBinder не работает для типов с нулевым значением

#c# #asp.net-mvc #model-binding

#c# #asp.net-mvc #привязка к модели

Вопрос:

У меня есть следующий пользовательский ModelBinder для DateTime:

 public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        ValueProviderResult value = null;
        try
        {
            value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
            return DateTime.ParseExact(value.AttemptedValue, _customFormat, CultureInfo.InvariantCulture);
        }
        catch (Exception)
        {
            // If there is a place where DateTime got used which "Bypassed" our EditorTemplate, it means the format will be the default format.
            // So let's allow the Model Binder to at least try to Parse the date with the default format.
            return DateTime.Parse(value.AttemptedValue);
        }
    }
  

Если я укажу аргумент в своем действии как nullable DateTime ( DateTime? dob ), ModelBinder не запускается.

Как я могу заставить ModelBinder работать для nullable DateTime?

Ответ №1:

Вам нужно зарегистрировать его дважды, вот так:

 ModelBinders.Binders.Add(typeof (DateTime), new DateTimeModelBinder());
ModelBinders.Binders.Add(typeof (DateTime?), new DateTimeModelBinder());
  

Комментарии:

1. Я только что осознал свою ошибку и собирался опубликовать ответ на свой собственный вопрос. Спасибо