Как форматировать дату в лямбда-выражении в Razor View
у меня есть представление, на котором мне нужно отобразить дату, отформатированную в "dd/MM/yyyy"
.
На самом деле он отображается как:@Html.LabelFor(model => model.DtNews)
и я не знаю, где и как я могу поместить функцию Format ().
данные извлекаются из БД с помощью EF.
Как я могу это сделать?
спасибо !
6 ответов
@Html.LabelFor(model => model.DtNews)
@Html.EditorFor(model => model.DtNews)
и на вашей модели представления, вы могли бы использовать [DisplayFormat]
атрибут
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime DtNews { get; set; }
теперь вы скажете мне, что этот класс генерируется платформой EF, на которую я бы ответил вам:ВЫ НЕ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ СВОИ АВТОГЕНЕРИРОВАННЫЕ МОДЕЛИ EF В СВОИХ ПРЕДСТАВЛЕНИЯХ. Необходимо определить и использовать модели представления. Модели представлений-это классы, специально адаптированные к требованиям ваших представлений. Например, в этом конкретном представлении у вас есть требование форматировать даты в особый способ: идеально подходит для просмотра моделей:
public class MyViewModel
{
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime DtNews { get; set; }
}
тогда ваше действие контроллера может запросить ваш репозиторий и получить модель домена (автогенерированный объект EF) и сопоставить его с моделью представления. Затем он передаст эту модель представления в представление.
Я бы просто бросил класс приятеля на ваш model.DtNews
класс приятеля украсит вашу существующую модель
[MetadataType(NewsMetadata)]
public partial class News // this is the same name as the News model from EF
{ /* ... */ }
/* Metadata type */
public class NewsMetadata
{
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime DtNews { get; set; }
}
@Html.LabelFor(model => model.DtNews.ToString("dd/MM/yyyy"))
^следует сделать трюк.
вы также можете использовать шаблоны редактора/отображения, как обсуждалось здесь.
Если DtNews
это DateTime
, то попробуйте этот:
@Html.LabelFor(model => model.DtNews.ToString("dd/MM/yyyy"));