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

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


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

Ответы:


297

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

@model SampleModel

11
это был заглавный m, который сделал это для меня
whossname

что если у вас есть модель?
djack109

92

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

@Model SampleModel

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

@model SampleModel

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

1

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.