Razor View Engine: un árbol de expresiones no puede contener una operación dinámica

173

Tengo un modelo similar a este:

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

Y en mi controlador obtengo una excepción al intentar imprimir

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

Este es el error:

Exception: An expression tree may not contain a dynamic operation

Si alguien me puede dar algunas pistas sobre cómo solucionar esto, ¡realmente lo agradecería!

femseks
fuente
1
¿Está esto en MVC3 RC? ¿También puede mostrarnos cómo se ve el producto? No pude reproducirlo en MVC3 RC
bmancini

Respuestas:

297

Me parece que tienes una vista sin tipo. Por defecto, las vistas de 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 de vista, agregue

@model SampleModel
marcind
fuente
11
fue una m mayúscula lo que lo hizo por mí
cuyo nombre fue
¿Qué pasa si tienes un modelo?
djack109
92

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

@Model SampleModel

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

@model SampleModel
felbus
fuente
55
¡Gracias por agregar esta respuesta! Es sorprendente cómo después de años de programación puedes olvidarte de la mayúsculas y minúsculas.
brentlightsey
1
También puede suceder si usa "modelo" en lugar de "@Model" ... que se generará pero fallará en tiempo de ejecución.
Dave Remy
8

En este enlace explique sobre @model, vea un extracto:

@model("minúscula") es una palabra clave reservada en las vistas de Razor para declarar el tipo de modelo en la parte superior de su vista. También ha puesto el espacio de nombres, por ejemplo:@model MyNamespace.Models.MyModel

Más adelante en el archivo, puede hacer referencia al atributo que desea @Model.Attribute(mayúscula "M").

Charlestown
fuente
2
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
7

Parece que tu vista está escrita dynamic. Establezca el tipo correcto en la vista y verá que el error desaparece.

Esteban Araya
fuente
5

Antes de usar (escriba html helper a la vista) esta línea

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

Debe incluir su modelo en su página para hacer una vista de tipo fuerte.

@model SampleModel
Kuber
fuente
1

Este error me ocurrió porque tenía @@ model en lugar de @model ... error de copiar y pegar en mi caso. Cambiar a @model me lo arregló.

JosephDoggie
fuente
0

En vb.net debes escribir @ModelType.

Sidra de pera
fuente