Я разрабатываю веб-приложение 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)
Любая идея?
Спасибо.