Как разрешить нулевое значение в обязательном DateTime с нулевым значением в HTML-форме .NET MVC3?

Я пытался:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}", ConvertEmptyStringToNull = true)]
[Required(AllowEmptyStrings = true)]
public DateTime? BirthDateFrom { get; set; }

и

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
[Required]
public DateTime? BirthDateFrom { get; set; }

и все комбинации с ConvertEmptyStringToNull и AllowEmptyStrings и без них.

Имеется в виду:

@Html.EditorFor(m => m.BirthDateFrom)

Я могу отправить форму с действительной датой, но с пустой строкой в ​​этом поле она просто становится красной, и форма не может быть отправлена. Как разрешить отправку HTML-формы с нулевым или пустым строковым значением в обязательном DateTime, допускающем значение NULL?


person Hogan    schedule 13.03.2011    source источник
comment
Это звучит как Contradictio in terminis. Если поле Обязательное, почему оно допускает значение NULL? Вы ищете способ выразить DateTime.Empty? Требование сбивает с толку.   -  person rene    schedule 13.03.2011
comment
@rene DateTime.Empty было бы неплохо.   -  person Hogan    schedule 13.03.2011
comment
Обязательное поле, допускающее значение NULL, не имеет смысла, поэтому, вероятно, вы не можете вписать его в работу MVC. Тем не менее, удаление обязательного атрибута должно помочь, не так ли?   -  person kprobst    schedule 24.01.2012


Ответы (3)


Мне кажется, что простое удаление аннотации [Required] полностью соответствует вашим требованиям.

person Mike Manard    schedule 23.01.2012

Тот факт, что тип допускает значение NULL, означает, что значение не требуется. Нет смысла применять ненулевое значение или нулевое значение, поскольку нулевое значение в любом случае не предоставляет никакой информации.

Похоже, у вас возникла проблема с несколькими значениями 'null', например «нет» против «любое» против «неизвестно». К сожалению, концепция null в .NET не включает различные типы null. Единственный способ сообщить об этом - использовать:

а) "сигнальные" значения, например DateTime.MinValue сообщает что-то особенное, и вы уверены, что DateTime.MinValue никогда не будет допустимым значением в вашей модели предметной области.

б) использовать внешние флаги, чтобы указать значение отсутствующего значения DateTime, например bool isAny, bool isUnknown и т. Д. Или, возможно, подходящее перечисление

person Adam Ralph    schedule 13.03.2011

Если вы имеете дело с EF, вы можете сделать его таким же необязательным.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();            
    base.OnModelCreating(modelBuilder);
}
person Sakthivel    schedule 05.08.2015