Обычно это связано с ненулевыми типами, которые не выполняются в подшивке модели при разборе.Сделайте дату недействительной в модели и посмотрите, решит ли это вашу проблему.В противном случае, напишите свой собственный связыватель модели и обработайте его лучше.
Редактировать: И под моделью я подразумеваю модель представления для представления, чтобы внести рекомендуемые изменения, если вы хотите придерживаться привязки к вашей модели вview (который, как я предполагаю, использует EF), следуйте предложению написать свою собственную модель подшивки
Редактировать 2: Мы сделали что-то вроде этого, чтобы получить пользовательский формат для анализа в обнуляемой дате / времени (что может быть хорошимначните настраивать тип, отличный от nullable):
public sealed class DateTimeBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext == null)
{
throw new ArgumentNullException("controllerContext");
}
if (bindingContext == null)
{
throw new ArgumentNullException("bindingContext");
}
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult);
if (valueProviderResult == null)
{
return null;
}
var attemptedValue = valueProviderResult.AttemptedValue;
return ParseDateTimeInfo(bindingContext, attemptedValue);
}
private static DateTime? ParseDateTimeInfo(ModelBindingContext bindingContext, string attemptedValue)
{
if (string.IsNullOrEmpty(attemptedValue))
{
return null;
}
if (!Regex.IsMatch(attemptedValue, @"^\d{2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}$", RegexOptions.IgnoreCase))
{
var displayName = bindingContext.ModelMetadata.DisplayName;
var errorMessage = string.Format("{0} must be in the format DD-MMM-YYYY", displayName);
bindingContext.ModelState.AddModelError(bindingContext.ModelMetadata.PropertyName, errorMessage);
return null;
}
return DateTime.Parse(attemptedValue);
}
}
Затем зарегистрируйте это с помощью (указав этот класс в контейнере для ввода зависимостей):
public class EventOrganizerProviders : IModelBinderProvider
{
public IModelBinder GetBinder(Type modelType)
{
if (modelType == typeof(DateTime))
{
return new DateTimeBinder();
}
// Other types follow
if (modelType == typeof(TimeSpan?))
{
return new TimeSpanBinder();
}
return null;
}
}