Aparat widoku Razor: drzewo wyrażenia nie może zawierać operacji dynamicznej

173

Mam model podobny do tego:

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

W moim kontrolerze pojawia się wyjątek podczas próby wydrukowania

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

To jest błąd:

Exception: An expression tree may not contain a dynamic operation

Jeśli ktoś może dać mi wskazówki, jak to naprawić, byłbym naprawdę wdzięczny!

femseks
źródło
1
Czy to na MVC3 RC? Czy możesz nam również pokazać, jak wygląda produkt? Nie udało mi się go odtworzyć w MVC3 RC
bmancini

Odpowiedzi:

297

Wydaje mi się, że masz nietypowy widok. Domyślnie widoki Razor w MVC3 RC są wpisywane jako dynamic. Jednak wyrażenia lambda nie obsługują dynamicznych elementów członkowskich. Musisz mocno wpisać swój model. W górnej części pliku widoku dodaj

@model SampleModel
marcind
źródło
11
zrobiło to dla mnie wielkie m
imię
co jeśli masz model?
djack109
92

Typowy błąd, który jest tego przyczyną, występuje podczas dodawania

@Model SampleModel

u góry strony zamiast

@model SampleModel
felbus
źródło
5
Dziękujemy za dołączenie tej odpowiedzi! Niesamowite, jak po latach programowania można zapomnieć o rozróżnianiu wielkości liter.
brentlightsey
1
Może się to również zdarzyć, jeśli użyjesz „model” zamiast „@Model” ... który będzie się budował, ale zakończy się niepowodzeniem w czasie wykonywania.
Dave Remy
8

W tym linku wyjaśnij @model, zobacz fragment:

@model(mała litera „m”) jest zastrzeżonym słowem kluczowym w widokach Razor, aby zadeklarować typ modelu w górnej części widoku. Umieściłeś też przestrzeń nazw, np:@model MyNamespace.Models.MyModel

W dalszej części pliku możesz odwołać się do żądanego atrybutu za pomocą @Model.Attribute(wielkie litery „M”).

Charlestown
źródło
2
To był mój problem. Jeśli nie obserwujesz uważnie, program Visual Studio ma tendencję do konwertowania tego, co wpisujesz, na duże „M”. To naprawdę irytujące.
RobbieE
7

Wygląda na to, że Twój widok jest wpisany dynamic. Ustaw odpowiedni typ w widoku, a zobaczysz, że błąd zniknie.

Esteban Araya
źródło
5

Przed użyciem (zdecydowanie wpisz pomocnika html w widoku) ten wiersz

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

Powinieneś dołączyć swój model do swojej strony, aby utworzyć widok silnego typu.

@model SampleModel
Kuber
źródło
1

Ten błąd przydarzył mi się, ponieważ miałem model @@ zamiast @model ... błąd kopiowania i wklejania w moim przypadku. Zmiana na @model naprawiła to za mnie.

JosephDoggie
źródło
0

Na vb.net musisz napisać @ModelType.

Wino z gruszek
źródło