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

Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива или однопараметрическими выражениями пользовательского индексатора

Эта часть кода не работает

@foreach (var item in Model) {
        <tr>
            <td>
            @Html.DisplayFor(modelItem=>item.Registrations.Count())
         </td>

и выдает ошибку

[InvalidOperationException: Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива или однопараметрическими пользовательскими выражениями индексатора.]

Но эта часть кода ниже работает как шарм.

@foreach (var item in Model) {
    <tr>
        <td>
           @item.Registrations.Count()
        </td>

Есть ли кто-нибудь, кто может объяснить, почему так?

4b9b3361

Ответ 1

Я бы подумал, потому что вы используете modelItem => item.Registrations.Count(). DisplayFor хочет выражение, которое ссылается на член вашей модели, а не на функцию-член, поскольку связующее устройство модели не будет знать, как сериализовать данные на обратном пути (т.е. после сообщения формы).

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

Ответ 2

Я просто видел это сообщение об ошибке при попытке создать элемент управления для неподходящего типа данных, например, при попытке использования (в синтаксисе VB.NET):

@Html.CheckBoxFor(Function(model) model.IsLotTraced)

Где IsLotTraced объявляется как

Public Property IsLotTraced As String

Ошибка исчезает, когда она изменяется на

Public Property IsLotTraced As Boolean

Ответ 3

Да, после сообщения формы подумайте, потому что вы используете modelItem = > item.Registrations.Count(). DisplayFor - это выражение, которое ссылается на члена вашей модели, а не на функцию-член, поскольку связующее устройство модели не будет знать, как сериализовать данные на обратном пути.