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!


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

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

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


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.


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

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.


0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.