Форматирование ошибки DateTime "Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива".
В представлении MVC Razor я пытаюсь отформатировать поле DateTime, чтобы отображать только время. Используя нижеприведенный код, я получаю сообщение об ошибке "Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива или однопараметрическими пользовательскими выражениями индексатора".
<td>@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss")))</td>
Любая помощь объясняет, что вызывает эту ошибку и как ее исправить?
Спасибо за вашу помощь.
Ответы
Ответ 1
DisplayFor ожидает выражение, которое идентифицирует объект, который содержит отображаемые свойства. Он будет использовать встроенные или настраиваемые шаблоны для отображения этого экрана. Вы пытаетесь предоставить логику отображения в качестве этого параметра выражения, что недопустимо.
Используйте
@String.Format("HH:mm:ss", Model.row.LastUpdateDate)
или
@Model.row.LastUpdateDate.ToString("HH:mm:ss")
Ответ 2
У меня была такая же проблема, и я решил проблему.
Если вы хотите преобразовать "LastUpdatedDate" в определенный формат, вы можете попробовать следующее:
@Html.TextBoxFor(m=>row.LastUpdatedDate,
new { @Value = Convert.ToString(row.LastUpdatedDate.ToShortDateString()) })
Ответ 3
Другим возможным подходом может быть использование методов расширения для достижения того же. Используя этот подход, вы не будете заполнять свои представления жестко закодированным форматом.
Метод расширения
/// <summary>
/// Converts a DateTime string to Date string. Also if Date is default value i.e. 01/01/0001
/// then returns String.Empty.
/// </summary>
/// <param name="inputDate">Input DateTime property </param>
/// <param name="showOnlyDate">Pass true to show only date.
/// False will keep the date as it is.</param>
/// <returns></returns>
public static string ToString(this DateTime inputDate, bool showOnlyDate)
{
var resultDate = inputDate.ToString();
if (showOnlyDate)
{
if (inputDate == DateTime.MinValue)
{
resultDate = string.Empty;
}
else
{
resultDate = inputDate.ToString("dd-MMM-yyyy");
}
}
return resultDate;
}
Просмотр
@Model.LastUpdateDate.ToString(true).
Ссылка: DateTime to Date в ASP.net MVC
Ответ 4
У вас есть очень простой способ решить эту проблему, и вы можете столкнуться с этой проблемой несколько раз.
Чтобы понять, что происходит, вы передаете метод в качестве параметра. Вместо этого вы должны передать выражение.
Вместо этого
<td>@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss")))</td>
Вы должны сделать
var date = row.LastUpdatedDate.ToString("HH:mm:ss")
<td>@Html.DisplayFor(m=> date)</td>
Ответ 5
Вместо TextBoxДля использования TextBox и укажите формат в поле значения, т.е.
@Html.TextBox("textboxName", Model.dateName.ToString("MMM dd yyyy"))
Используя bootstrap datepicker, это будет выглядеть так:
<div class="input-group date datetime col-md-8 col-xs-7" data-min-view="2" data-date-format="M dd yyyy">
@Html.TextBox("closeDate", Model.closeDate.ToString("MMM dd yyyy"), new { @class = "form-control", @readonly = "readonly", size = "16", placeholder = Lang.Label_closeDate })
<span class="input-group-addon btn btn-primary">
<span class="glyphicon glyphicon-th"></span>
</span>
</div>