Механизм просмотра Razor: дерево выражений может не содержать динамической операции

у меня есть модель похожая на эту:

public class SampleModel
{
     public Product Product { get; set; } 
}

и в моем контроллере я получаю исключение, пытаюсь распечатать

@Html.TextBoxFor(p => p.Product.Name)

Это ошибка:

Exception: An expression tree may not contain a dynamic operation

Если кто-то может дать мне некоторые подсказки, как это исправить, я был бы очень признателен!

6 ответов


мне кажется, что у вас нетипизированный вид. По умолчанию представления Razor в MVC3 RC набираются как dynamic. Однако лямбда-выражения не поддерживают динамические элементы. Вы должны сильно печатать свою модель. В верхней части файла просмотра добавьте

@model SampleModel

распространенная ошибка, которая является причиной этого, когда вы добавляете

@Model SampleModel

в верхней части страницы вместо

@model SampleModel

В этой ссылке объясните о @model, см. выдержку:

@model (нижний регистр "m") является зарезервированным ключевым словом в представлениях Razor для объявите тип модели в верхней части представления. Вы положили пространство имен тоже, например: @model MyNamespace.Models.MyModel

позже в файле вы можете ссылаться на атрибут, с которым хотите @Model.Attribute (верхний регистр "M").


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


перед использованием (сильно введите HTML helper в поле зрения) эта строка

@Html.TextBoxFor(p => p.Product.Name)

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

@model SampleModel

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