Razor View Engine: дерево выражений может не содержать динамическую операцию

173

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

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

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

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

Это ошибка:

Exception: An expression tree may not contain a dynamic operation

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

femseks
источник
1
Это на MVC3 RC? Также вы можете показать нам, как выглядит продукт? Я не смог воспроизвести его в MVC3 RC
bmancini

Ответы:

297

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

@model SampleModel
marcind
источник
11
это был заглавный m, который сделал это для меня
whossname
что если у вас есть модель?
djack109
92

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

@Model SampleModel

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

@model SampleModel
felbus
источник
5
Спасибо за добавление этого ответа! Удивительно, как после многих лет программирования вы можете забыть о чувствительности к регистру.
Brentlightsey
1
Также может произойти, если вы используете «модель» вместо «@Model» ... которая будет собираться, но не работать во время выполнения.
Дэйв Реми
8

В этой ссылке рассказывается о @model, см. Выдержку:

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

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

Чарльстаун
источник
2
Это была моя проблема. Если вы не смотрите внимательно, Visual Studio стремится преобразовать то, что вы печатаете, в заглавную букву «М». Это действительно раздражает.
RobbieE
7

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

Эстебан Арайя
источник
5

Перед использованием (строго введите html helper)

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

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

@model SampleModel
Kuber
источник
1

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

JosephDoggie
источник
0

На vb.net вы должны написать @ModelType.

грушевый сидр
источник