Razor View Engine: un albero delle espressioni non può contenere un'operazione dinamica


173

Ho un modello simile a questo:

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

E nel mio controller ottengo un'eccezione nel tentativo di stampare

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

Questo è l'errore:

Exception: An expression tree may not contain a dynamic operation

Se qualcuno mi può dare qualche indizio su come risolvere questo, lo apprezzerei davvero!


1
È su MVC3 RC? Puoi anche mostrarci che aspetto ha il prodotto? Non sono riuscito a riprodurlo in MVC3 RC
bmancini l'

Risposte:


297

Mi sembra che tu abbia una visione non tipizzata. Per impostazione predefinita, le viste Razor in MVC3 RC sono digitate come dynamic. Tuttavia, i lambda non supportano i membri dinamici. Devi digitare fortemente il tuo modello. Nella parte superiore del file di visualizzazione aggiungi

@model SampleModel

11
era una lettera maiuscola che l'ha fatto per me
nome è

cosa succede se hai un modello?
djack109,

92

Un errore comune che ne è la causa è quando si aggiunge

@Model SampleModel

nella parte superiore della pagina anziché

@model SampleModel

5
Grazie per aver aggiunto questa risposta! Incredibile come dopo anni di programmazione puoi dimenticare la distinzione tra maiuscole e minuscole.
Brentlightsey,

1
Inoltre può succedere se usi "modello" invece di "@Modello" ... che si costruirà ma fallirà in fase di esecuzione.
Dave Remy,

8

In questo link spiega @model, vedi un estratto:

@model(minuscola "m") è una parola chiave riservata nelle viste Rasoio per dichiarare il tipo di modello nella parte superiore della vista. Hai inserito anche lo spazio dei nomi, ad esempio:@model MyNamespace.Models.MyModel

Più avanti nel file, è possibile fare riferimento all'attributo desiderato @Model.Attribute("M" maiuscola).


2
Questo era il mio problema Se non stai guardando attentamente, Visual Studio tende a convertire ciò che stai digitando nella "M" maiuscola. È davvero irritante.
Robbie E

7

Sembra che la tua vista sia digitata dynamic. Imposta il tipo giusto nella vista e vedrai che l'errore scompare.


5

Prima di utilizzare (digitare fortemente helper HTML in vista) questa riga

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

Dovresti includere il tuo modello nella tua pagina per creare una vista fortemente tipizzata.

@model SampleModel

1

Questo errore mi è successo perché avevo il modello @@ anziché @model ... errore copia e incolla nel mio caso. Il passaggio a @model ha risolto il problema per me.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.