ASP.NET MVC отображает дату без времени

У меня есть мое поле модели, оформленное следующим образом:

[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
public string DateOfBirth { get; set; }

Когда я хочу отобразить значение в представлении, используя следующий код:

<%: Html.DisplayFor(m => m.DateOfBirth) %>

Проблема заключается в том, что дата отображается вместе со значением времени. Интересно, почему он не учитывает атрибут DateType и отображает только значение даты без времени. Я знаю, что я могу создать шаблон отображения для DateTime, но в других случаях, кроме даты рождения, я хочу показать время вместе с датой. Как решить проблему?

Ответ 1

Используйте DisplayFormatAttribute, чтобы указать формат, когда отображается значение. Кроме того, вы можете создать два DisplayTemplates, Date и DateTime и использовать UIHintAttribute для указания шаблона

Ответ 2

Проблема заключается в том, что вы используете строковое значение, а не DateTime.

измените свою модель:

[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
public DateTime? DateOfBirth { get; set; }

DataType будет работать только в том случае, если он является типом DateTime, вы также получаете дополнительное преимущество в том, что он автоматически проверяет его как действительную дату при использовании DateTime. Если вы используете строку, вам нужно будет использовать средство проверки регулярных выражений, чтобы обеспечить правильную дату.

Ответ 3

Это должно быть сделано для режима редактирования и отображения

 [DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:MM/dd/yyyy}")]

хотя, если это просто отображение, это может работать

[DisplayFormat(DataFormatString = "{0:d}")]

Ответ 4

Вы можете использовать ToShortDateString() или ToLongDateString() для отображения только даты, например:

@Model.EventDate.ToShortDateString()
@Model.EventDate.ToLongDateString()

Ответ 5

Если ваша дата имеет тип DateTime, а ToShortDateString() или ToLongDateString() по-прежнему не работают, проверьте, может ли ваш DateTime иметь значение null (DateTime?). Сделать это не обнуляемым может сделать свое дело.

Ответ 6

используя @Value и ToShortDateString(), вы можете отображать только дату.

@Html.TextBoxFor(model => model.StartDate, "", new { id = "date", @class = "datepicker", @style = "width:70%; height:30px;", @placeholder = "Enter Date", @Value = @Model.StartDate.ToShortDateString()})

Ответ 7

Если вы используете MVC, возможно, вы можете попробовать это на своем клиентском скрипте:

@{
      string birthDateOnly = Model.DateOfBirth.Date.ToShortDateString();
 }
@Html.DisplayTextFor(m => birthDateOnly)