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!


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

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

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").


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.


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

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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.