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

Мені здається, у вас нетиповий погляд. За замовчуванням представлення "Бритви" в MVC3 RC набираються як dynamic. Однак лямбда не підтримують динамічних членів. Ви повинні сильно набрати свою модель. У верхній частині файлу перегляду додайте

@model SampleModel

11
це було велике м, що зробило це для мене
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-помічник у поле перегляду) цей рядок

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

Ви повинні включити свою модель на свою сторінку, щоб створити перегляд сильно типу.

@model SampleModel

1

Ця помилка трапилася зі мною, оскільки у мене була модель @@ замість @model ... помилка копіювання та вставки у моєму випадку. Змінившись на @model, виправили це для мене.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.