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 2010年

Answers:


297

在我看来,您的观点没有定型。默认情况下,MVC3 RC中的Razor视图键入为dynamic。但是,lambda不支持动态成员。您必须严格键入模型。在视图文件的顶部添加

@model SampleModel

11
它是对我
有用的

如果您有模特怎么办?
djack109

91

导致此问题的常见错误是您添加

@Model SampleModel

在页面顶部而不是

@model SampleModel

5
感谢您附加此答案!经过多年的编程,您如何能忘记区分大小写的惊人之处。
brentlightsey

1
如果使用“模型”而不是“ @Model”,也会发生这种情况,这将生成但在运行时失败。
Dave Remy

8

在此链接中,有关@model的说明,请参见节选:

@model(小写的“ m”)是Razor视图中的保留关键字,用于在视图顶部声明模型类型。您也已经放置了名称空间,例如:@model MyNamespace.Models.MyModel

在文件的后面,您可以引用所需的属性 @Model.Attribute(大写“ M”)。


2
这是我的问题。如果您没有仔细看,Visual Studio会倾向于将您输入的内容转换为大写的“ M”。真的很烦人。
RobbieE

7

好像您的视图已输入dynamic。在视图上设置正确的类型,您将看到错误消失。


5

在使用此行(在视图中强烈键入html helper)之前

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

您应该将模型包括在页面中以进行强类型视图。

@model SampleModel

1

我发生此错误是因为我有@@ model而不是@model ...就我而言,复制并粘贴错误。更改为@model为我修复了它。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.