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

fem*_*eks 164 asp.net-mvc .net-4.0 razor

我有一个类似的模型:

public class SampleModel
{
     public Product Product { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我尝试打印出异常

@Html.TextBoxFor(p => p.Product.Name)
Run Code Online (Sandbox Code Playgroud)

这是错误:

Exception: An expression tree may not contain a dynamic operation
Run Code Online (Sandbox Code Playgroud)

如果有人能给我一些如何解决这个问题的线索我真的很感激!

mar*_*ind 286

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

@model SampleModel
Run Code Online (Sandbox Code Playgroud)

  • 这是一个大写的m,它为我做了 (10认同)

fel*_*bus 87

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

@Model SampleModel
Run Code Online (Sandbox Code Playgroud)

在页面顶部而不是

@model SampleModel
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你补充这个答案!令人惊讶的是,经过多年的编程,您可以忘记区分大小写. (3认同)
  • 如果您使用“model”而不是“@Model”也可能发生……这将构建但在运行时失败。 (2认同)

小智 7

在此链接中解释@model,请参阅摘录:

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

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

  • 这是我的问题。如果您不仔细观察,Visual Studio 往往会将您键入的内容转换为大写的“M”。这真的很烦人。 (2认同)

Est*_*aya 6

好像你的视图是打字的dynamic.在视图上设置正确的类型,您将看到错误消失.


小智 5

在使用之前(强烈在视图中输入 html helper)这一行

@Html.TextBoxFor(p => p.Product.Name)
Run Code Online (Sandbox Code Playgroud)

您应该将模型包含在页面中以制作强类型视图。

@model SampleModel
Run Code Online (Sandbox Code Playgroud)