шаблоны "ошибка форматирования 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).

ссылки: DateTime на сегодняшний день в ASP.net MVC


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

чтобы понять, что происходит, передается методу в качестве параметра. Вместо этого вы должны передать выражение.

вместо

<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>