Razor View Engine: Ein Ausdrucksbaum enthält möglicherweise keine dynamische Operation

173

Ich habe ein ähnliches Modell:

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

Und in meinem Controller erhalte ich eine Ausnahme beim Ausdrucken

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

Dies ist der Fehler:

Exception: An expression tree may not contain a dynamic operation

Wenn mir jemand Hinweise geben kann, wie ich das beheben kann, würde ich es wirklich begrüßen!

Femseks
quelle
1
Ist das auf MVC3 RC? Können Sie uns auch zeigen, wie das Produkt aussieht? Ich konnte es nicht in MVC3 RC
bmancini

Antworten:

297

Es scheint mir, dass Sie eine untypisierte Ansicht haben. Standardmäßig werden Rasiermesseransichten in MVC3 RC wie folgt eingegeben dynamic. Lambdas unterstützen jedoch keine dynamischen Mitglieder. Sie müssen Ihr Modell stark eingeben. Fügen Sie oben in Ihrer Ansichtsdatei hinzu

@model SampleModel
Marcind
quelle
11
Es war ein Großbuchstabe, der es für mich
getan
Was ist, wenn Sie ein Modell haben?
djack109
92

Ein häufiger Fehler, der die Ursache dafür ist, ist das Hinzufügen

@Model SampleModel

oben auf der Seite statt

@model SampleModel
felbus
quelle
5
Vielen Dank, dass Sie diese Antwort angehängt haben! Erstaunlich, wie Sie nach Jahren des Programmierens die Groß- und Kleinschreibung vergessen können.
Brentlightsey
1
Kann auch passieren, wenn Sie "model" anstelle von "@Model" verwenden ... das erstellt wird, aber zur Laufzeit fehlschlägt.
Dave Remy
8

In diesem Link erklären Sie @model, siehe einen Auszug:

@model(Kleinbuchstabe "m") ist ein reserviertes Schlüsselwort in Razor-Ansichten, um den Modelltyp oben in Ihrer Ansicht zu deklarieren. Sie haben auch den Namespace eingegeben, z.@model MyNamespace.Models.MyModel

Später in der Datei können Sie auf das gewünschte Attribut verweisen @Model.Attribute(Großbuchstabe "M").

Charlestown
quelle
2
Das war mein Problem. Wenn Sie nicht genau hinschauen, konvertiert Visual Studio das, was Sie eingeben, in das Großbuchstaben "M". Es ist wirklich irritierend.
RobbieE
7

Ihre Ansicht scheint getippt zu sein dynamic. Wenn Sie den richtigen Typ in der Ansicht festlegen, wird der Fehler behoben.

Esteban Araya
quelle
5

Bevor Sie diese Zeile verwenden (geben Sie den HTML-Helfer stark in die Ansicht ein)

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

Sie sollten Ihr Modell in Ihre Seite aufnehmen, um eine stark typisierte Ansicht zu erstellen.

@model SampleModel
Kuber
quelle
1

Dieser Fehler ist mir passiert, weil ich in meinem Fall @@ model anstelle von @model ... Kopier- und Einfügefehler hatte. Der Wechsel zu @model hat das Problem für mich behoben.

Joseph Doggie
quelle
0

Auf vb.net müssen Sie @ModelType schreiben.

Perry
quelle