шаблоны "ошибка форматирования DateTime" можно использовать только с доступом к полю, свойству, индексу одномерного массива.."
в представлении MVC Razor я пытаюсь отформатировать поле DateTime для отображения только времени. Используя код ниже, я получаю ошибку "шаблоны могут использоваться только с доступом к полю, доступом к свойствам, индексом одномерного массива или выражениями пользовательского индексатора с одним параметром."
<td>@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss")))</td>
любая помощь пожалуйста, что вызывает эту ошибку и как ее исправить ?
Спасибо за помощь.
5 ответов
DisplayFor ожидает выражение, идентифицирующее объект, содержащий отображаемые свойства. Он будет использовать встроенные или пользовательские шаблоны для отображения дисплея. Вы пытаетесь предоставить логику отображения в качестве этого параметра выражения, который недопустим.
использовать
@String.Format("HH:mm:ss", Model.row.LastUpdateDate)
или
@Model.row.LastUpdateDate.ToString("HH:mm:ss")
У меня была такая же проблема и я решил проблему. Если вы хотите преобразовать "LastUpdatedDate" в определенный формат, вы можете попробовать следующее:
@Html.TextBoxFor(m=>row.LastUpdatedDate,
new { @Value = Convert.ToString(row.LastUpdatedDate.ToShortDateString()) })
другим возможным подходом может быть использование методов расширения для достижения того же самого. Используя этот подход, вы не будете заполнять свои представления жестко закодированным форматом.
Метод Расширения
/// <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).
у вас есть очень простой способ решить эту проблему, и вы можете столкнуться с этой проблемой не раз.
чтобы понять, что происходит, передается методу в качестве параметра. Вместо этого вы должны передать выражение.
вместо
<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>
вместо TextBoxFor используйте 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>