web-dev-qa-db-fra.com

Razor View Engine: un arbre d'expression ne peut pas contenir d'opération dynamique

J'ai un modèle semblable à ceci:

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

Et dans mon contrôleur, une exception essaie d’imprimer

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

C'est l'erreur:

Exception: An expression tree may not contain a dynamic operation

Si quelqu'un pouvait me donner des indices sur la façon de résoudre ce problème, je l'apprécierais vraiment!

159
femseks

Il me semble que vous avez une vue non typée. Par défaut, les vues Razor dans MVC3 RC sont saisies sous la forme dynamic. Cependant, les lambdas ne supportent pas les membres dynamiques. Vous devez taper fortement votre modèle. En haut de votre fichier de vue, ajoutez

@model SampleModel
281
marcind

Une erreur courante qui en est la cause est lorsque vous ajoutez

@Model SampleModel

en haut de la page au lieu de

@model SampleModel
87
felbus

Dans ce lien expliquez à propos de @model, voyez un extrait:

@model (minuscule "m") est un mot clé réservé dans les vues Razor pour déclarer le type de modèle en haut de votre vue. Vous avez également mis l'espace de noms, par exemple: @model MyNamespace.Models.MyModel

Plus tard dans le fichier, vous pouvez référencer l'attribut souhaité avec @Model.Attribute (majuscule "M").

7
Charlestown

On dirait que votre vue est saisie dynamic. Définissez le bon type sur la vue et vous verrez l'erreur disparaître.

6
Esteban Araya

Avant d’utiliser (taper fortement helper HTML dans la vue), cette ligne

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

Vous devez inclure votre modèle dans votre page pour créer une vue fortement typée.

@model SampleModel
4
Kuber

Cette erreur m'est arrivée parce que j'avais @@ model au lieu de @model ... erreur de copier/coller dans mon cas. Passer à @model a résolu le problème pour moi.

0
JosephDoggie