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

Я пробовал:

[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.

и без него.have:

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

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

Ответы [ 3 ]

9 голосов
/ 24 января 2012

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

5 голосов
/ 13 марта 2011

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

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

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

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

0 голосов
/ 05 августа 2015

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

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