Подтвердить что ты не робот

ASP.NET MVC Razor Удалить время из свойства DateTime

Я разрабатываю веб-приложение ASP.Net MVC 3 с использованием Razor Views. У меня есть следующий ViewModel, который передается в мой Razor View и повторяется, чтобы отобразить список записей.

ViewModel

public class ViewModelLocumEmpList
{
    public IList<FormEmployment> LocumEmploymentList {get; set;}
}

Просмотр

<table>
  <tr>
   <th>Employer</th>
   <th>Date</th>
   </tr>
    @foreach (var item in Model.LocumEmploymentList) {
      <tr>
        <td>@item.employerName</td>
        <td>@item.startDate</td>
      </tr>
      }
      </table>

Моя проблема в том, что строка

@Html.DisplayFor(modelItem => item.startDate)

Возвращает дату, подобную этой 20/06/2012 00:00:00, и мне бы хотелось, чтобы она удалила время и просто отобразила дату, т.е. 20/06/2012.

Я попытался добавить

@Html.DisplayFor(modelItem => item.startDate.Value.ToShortDateString())

и

DisplayFor(modelItem => item.startDate.HasValue ? item.startDate.Value.ToShortDateString(): "")

Однако оба они возвращают следующее сообщение об ошибке во время выполнения

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

Я посмотрел на Дарина Димитрова, отвечающего здесь Преобразование формата DateTime с помощью бритвы

Однако у меня нет доступа к свойству startDate в моей модели ViewModel, мой ViewModel возвращает объекты IList из FormEmployment, которые вы можете видеть выше.

Если у кого-нибудь есть идеи о том, как удалить время из свойства даты, тогда я был бы очень благодарен.

Спасибо.

Кроме того, мое свойство startDate является Nullable.

Обновление

На основе ответа PinnyM я добавил частичный класс (см. ниже), чтобы поместить атрибут [DisplayFormat] в свойство startDate.

public partial class FormEmployment
{
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public Nullable<System.DateTime> startDate { get; set; }
}

Однако мой Razor View по-прежнему отображает 20/06/2012 00:00:00, используя следующий код

@Html.DisplayFor(modelItem => item.startDate)

Любая идея?

Спасибо.

4b9b3361

Ответ 1

Вы можете использовать @item.startDate.Value.ToShortDateString() (добавив правильную проверку для нулевого значения)

Ответ 2

Вы можете использовать атрибут DisplayFormat в свойстве модели startDate:

[DisplayFormat(DataFormatString="{0:dd/MM/yyyy}")]
public DateTime? startDate { get; set; }

Просто используйте DisplayFor(modelItem => item.startDate)

Другой вариант - создать свойство только для чтения только для форматирования:

public String startDateFormatted { get { return String.Format("{0:dd/MM/yyyy}", startDate); } }

И используйте DisplayFor(modelItem => item.startDateFormatted)