2010-11-11 33 views
138

tengo un modelo similar a esto:Razor Vista del motor: un árbol de expresión no puede contener una operación dinámica

public class SampleModel 
{ 
    public Product Product { get; set; } 
} 

Y en mi controlador consigo una excepción tratando de imprimir

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

Este es el error:

Exception: An expression tree may not contain a dynamic operation 

Si alguien puede darme algunas pistas sobre cómo solucionar esto, realmente apreciaría ¡eso!

+1

¿Es esto en MVC3 RC? ¿También puede mostrarnos cómo es el producto? No pude reproducirlo en MVC3 RC – bmancini

Respuesta

242

Me parece que tiene una vista sin tipo. De forma predeterminada, las vistas Razor en MVC3 RC se escriben como dynamic. Sin embargo, las lambdas no admiten miembros dinámicos. Tienes que escribir fuertemente tu modelo. En la parte superior de su archivo Ver Añadir

@model SampleModel 
+0

Gracias marcind. –

+0

wow gracias, había escrito inadvertidamente algunas letras delante de mi @model ... – BigOmega

+5

era una mayúscula m que lo hizo por mí – whossname

4

parece que su visión se escribe dynamic. Establezca el tipo correcto en la vista y verá desaparecer el error.

71

un error común que es la causa de esto es cuando se agrega

@Model SampleModel 

en la parte superior de la página en lugar de

@model SampleModel 
+2

Gracias por añadir esta respuesta! Es sorprendente cómo, después de años de programación, puede olvidarse de la distinción entre mayúsculas y minúsculas. – brentlightsey

+0

También puede suceder si utiliza "modelo" en lugar de "@Modelo" ... que se compilará pero fallará en el tiempo de ejecución. –

+0

¡Gracias @million veces! –

0

Este error ocurrido a mí porque tenía @@ modelo en lugar de @model ... copie el error de pegar & en mi caso. Cambiar a @model lo solucionó por mí.

4

Antes de utilizar (tipo fuerte ayuda HTML a la vista) esta línea

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

Debe incluir el modelo en que la página para hacer fuertemente tipo de vista.

@model SampleModel 
6

En este link explicar sobre @Model, ver un extracto:

@model (lowercase "m") is a reserved keyword in Razor views to declare the model type at the top of your view. You have put the namespace too, e.g.: @model MyNamespace.Models.MyModel

Later in the file, you can reference the attribute you want with @Model.Attribute (uppercase "M").

+0

Este fue mi problema. Si no está mirando atentamente, Visual Studio tiende a convertir lo que está escribiendo en la "M" mayúscula. Es realmente irritante. – RobbieE

Cuestiones relacionadas