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

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

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

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

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

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

5 ответов


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


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

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

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

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

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

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

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

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


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

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

Если ваша дата имеет тип DateTime и ToShortDateString() или ToLongDateString() все еще не работает, проверьте, является ли ваше DateTime nullable (DateTime?). Сделать его не nullable может сделать трюк.