Как форматировать дату в лямбда-выражении в 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; }
}

попробуйте это. это работает на меня.

@Model.DtNews.Значение.ToString ("dd-MM-yyyy")


@Html.LabelFor(model => model.DtNews.ToString("dd/MM/yyyy"))

^следует сделать трюк.

вы также можете использовать шаблоны редактора/отображения, как обсуждалось здесь.


Если DtNews это DateTime, то попробуйте этот:

@Html.LabelFor(model => model.DtNews.ToString("dd/MM/yyyy"));

Использовать

@HTML-код.TextBoxFor(м => м. MktEnquiryDetail.CallbackDate, " {0: dd/MM / yyyy}")