Razor 视图引擎:表达式树可能不包含动态操作

Posted

技术标签:

【中文标题】Razor 视图引擎:表达式树可能不包含动态操作【英文标题】:Razor View Engine : An expression tree may not contain a dynamic operation 【发布时间】:2011-05-08 12:15:07 【问题描述】:

我有一个类似的模型:

public class SampleModel

     public Product Product  get; set;  

在我的控制器中,我得到一个尝试打印的异常

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

这是错误:

Exception: An expression tree may not contain a dynamic operation

如果有人能给我一些有关如何解决此问题的线索,我将不胜感激!

【问题讨论】:

这是在 MVC3 RC 上吗?您还可以向我们展示产品的外观吗?我无法在 MVC3 RC 中重现它 【参考方案1】:

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

@model SampleModel

【讨论】:

这是一个大写的 m 为我做的 如果你有一个模型呢?【参考方案2】:

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

@Model SampleModel

在页面顶部而不是

@model SampleModel

【讨论】:

感谢您附加此答案!令人惊讶的是,经过多年的编程,您竟然可以忘记区分大小写。 如果你使用“model”而不是“@Model”也可能发生......这将在运行时构建但失败。【参考方案3】:

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

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

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

【讨论】:

这是我的问题。如果您不仔细观察,Visual Studio 倾向于将您输入的内容转换为大写“M”。真的很烦人。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

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

@model SampleModel

【讨论】:

【参考方案6】:

这个错误发生在我身上,因为我有@@model 而不是@model...复制和粘贴错误。更改为 @model 为我修复了它。

【讨论】:

【参考方案7】:

在 vb.net 上你必须写 @ModelType。

【讨论】:

以上是关于Razor 视图引擎:表达式树可能不包含动态操作的主要内容,如果未能解决你的问题,请参考以下文章

Razor引擎常规用法

Nancy - Razor 视图引擎

如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript

如何在 Razor 视图中测试 lambda 表达式?

ASP.NET MVC5 视图预编译

lambda 函数是不是可以包含 Razor 语法并在视图中执行?