2010-11-11 30 views
138

我有一個類似的模式: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 

如果任何人都可以給我一些關於如何解決這個問題的線索我會很感激它!

+1

這是在MVC3 RC?你也可以告訴我們什麼產品看起來像?我無法在MVC3中重現它RC – bmancini 2010-11-11 15:35:43

回答

242

在我看來,你有一個類型化的視圖。默認情況下,MVC3 RC中的Razor視圖鍵入爲dynamic。但是,lambda不支持動態成員。你必須強烈地輸入你的模型。在您的視圖文件的頂部添加

@model SampleModel 
+0

謝謝marcind。 – 2013-04-05 16:18:26

+0

哇,謝謝,我無意中輸入一些字母在我@model面前... – BigOmega 2013-07-22 19:07:45

+5

這是一個大寫字母M是爲我做 – whossname 2016-05-03 11:30:28

4

看起來像您的視圖是鍵入dynamic。在視圖上設置正確的類型,你會看到錯誤消失。

71

一個常見的錯誤是這樣做的原因是,當你在頁面的頂部添加

@Model SampleModel 

,而不是

@model SampleModel 
+2

感謝追加這個答案!令人驚訝的是,經過多年的編程,您可以忘記區分大小寫。 – brentlightsey 2013-05-21 01:16:42

+0

如果你用「模式」而不是「@Model」 ......這將建立,但在運行時失敗也有可能發生。 – 2015-04-29 00:23:34

+0

感謝@百萬次! – 2016-04-23 16:12:15

0

發生在我這個錯誤,因爲我有@@模型而不是@model ...複製&粘貼錯誤在我的情況。更改爲@model爲我解決了它。

4

使用前(強類型HTML輔助眼簾)這一行

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

你應該包括你的模型到你網頁製作強類型視圖。

@model SampleModel 
6

在這種link約@model解釋,看到一個摘錄:

@model (lowercase "m") is a reserved keyword in Razor views to declare the model type at the top of your view. You have put the namespace too, e.g.: @model MyNamespace.Models.MyModel

Later in the file, you can reference the attribute you want with @Model.Attribute (uppercase "M").

+0

這是我的問題。如果你沒有仔細觀察,Visual Studio傾向於將你輸入的內容轉換爲大寫字母「M」。真的很刺激。 – RobbieE 2017-01-24 12:43:08

相關問題