Шаблоны могут использоваться только с доступом к полю, доступом к свойству, индексом одномерного массива или выражениями настраиваемого индексатора с одним параметром - PullRequest
18 голосов
/ 29 марта 2012

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

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

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

Ответы [ 3 ]

28 голосов
/ 02 апреля 2012

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

РЕДАКТИРОВАТЬ: я бы странно имел ту же ошибку, но по совершенно другой причине, которая оказалась, что DateTime должен быть обнуляемым

0 голосов
/ 27 февраля 2014

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

0 голосов
/ 12 февраля 2014

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

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

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

Public Property IsLotTraced As String

Ошибка исчезает при изменении на

Public Property IsLotTraced As Boolean
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...