Razor View Engine: une arborescence d'expression ne peut pas contenir d'opération dynamique

173

J'ai un modèle similaire à celui-ci:

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

Et dans mon contrôleur, j'obtiens une exception en essayant d'imprimer

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

Voici l'erreur:

Exception: An expression tree may not contain a dynamic operation

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

femseks
la source
1
Est-ce sur MVC3 RC? Pouvez-vous également nous montrer à quoi ressemble le produit? Je n'ai pas pu le reproduire dans MVC3 RC
bmancini

Réponses:

297

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

@model SampleModel
Marcind
la source
11
c'était un m majuscule qui l'a fait pour moi
whossname
Et si vous aviez un modèle?
djack109
92

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

@Model SampleModel

en haut de la page au lieu de

@model SampleModel
Felbus
la source
5
Merci d'avoir ajouté cette réponse! C'est incroyable de voir comment, après des années de programmation, vous pouvez oublier la sensibilité à la casse.
brentlightsey
1
Cela peut également arriver si vous utilisez "model" au lieu de "@Model" ... qui se construira mais échouera à l'exécution.
Dave Remy
8

Dans ce lien expliquez sur @model, voir un extrait:

@model("m" minuscule) 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").

Charlestown
la source
2
C'était mon problème. Si vous ne regardez pas attentivement, Visual Studio a tendance à convertir ce que vous tapez en majuscule «M». C'est vraiment irritant.
RobbieE
7

Il semble que votre vue soit saisie dynamic. Définissez le bon type sur la vue et vous verrez l'erreur disparaître.

Esteban Araya
la source
5

Avant d'utiliser (tapez fortement l'aide html en 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
Kuber
la source
1

Cette erreur m'est arrivée parce que j'avais @@ model au lieu de @model ... erreur de copier-coller dans mon cas. Le passage à @model l'a corrigé pour moi.

JosephDoggie
la source
0

Sur vb.net, vous devez écrire @ModelType.

Poiré
la source