ASP.NET MVC отображает дату без времени - PullRequest
10 голосов
/ 06 июля 2011

Поле моей модели оформлено следующим образом:

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

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

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

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

Ответы [ 6 ]

10 голосов
/ 21 октября 2012

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

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

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

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

9 голосов
/ 06 июля 2011

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

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

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

[DisplayFormat(DataFormatString = "{0:d}")]
4 голосов
/ 30 ноября 2013

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

@Model.EventDate.ToShortDateString()
@Model.EventDate.ToLongDateString()
4 голосов
/ 06 июля 2011

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

2 голосов
/ 11 июля 2018

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

0 голосов
/ 02 апреля 2019

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

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