Razor View Engine:表达式树可能不包含动态操作

时间:2010-11-11 14:29:12

标签: asp.net-mvc .net-4.0 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

如果有人能给我一些如何解决这个问题的线索,我会非常感激!

7 个答案:

答案 0 :(得分:276)

在我看来,你有一个无类型的观点。默认情况下,MVC3 RC中的Razor视图键入为dynamic。但是,lambdas不支持动态成员。您必须强力键入您的模型。在视图文件的顶部添加

@model SampleModel

答案 1 :(得分:85)

造成这种情况的常见错误是当您添加

@Model SampleModel

位于页面顶部而不是

@model SampleModel

答案 2 :(得分:7)

在这个关于@model的link解释中,请参阅摘录:

  

@model(小写“m”)是Razor视图中的保留关键字   在视图顶部声明模型类型。你已经把   命名空间,例如:@model MyNamespace.Models.MyModel

     

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

答案 3 :(得分:6)

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

答案 4 :(得分:4)

在使用(强类型html助手进入视图)之前这一行

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

您应该将模型包含在您的页面中,以便进行强类型视图。

@model SampleModel

答案 5 :(得分:0)

这个错误发生在我身上,因为我有@@ model而不是@model ... copy&在我的情况下粘贴错误。改为@model为我修好了。

答案 6 :(得分:0)

在vb.net上,您必须编写@ModelType。