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!


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

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

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


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.


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

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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.