2010-11-11 29 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

相关问题