【问题标题】:Razor View Engine : An expression tree may not contain a dynamic operationRazor 视图引擎:表达式树可能不包含动态操作
【发布时间】: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 中重现它

标签: asp.net-mvc .net-4.0 razor


【解决方案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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-13
          • 2013-07-27
          • 1970-01-01
          • 2011-10-30
          • 2012-05-05
          • 1970-01-01
          • 2012-09-07
          相关资源
          最近更新 更多