Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива или однопараметрическими выражениями пользовательского индексатора
Эта часть кода не работает
@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>
Есть ли кто-нибудь, кто может объяснить, почему так?
Ответы
Ответ 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 - это выражение, которое ссылается на члена вашей модели, а не на функцию-член, поскольку связующее устройство модели не будет знать, как сериализовать данные на обратном пути.