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 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript