Razor View Engine: Pohon ekspresi mungkin tidak mengandung operasi yang dinamis


173

Saya memiliki model yang mirip dengan ini:

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

Dan di pengontrol saya, saya mendapatkan pengecualian mencoba mencetak

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

Ini kesalahannya:

Exception: An expression tree may not contain a dynamic operation

Kalau ada yang bisa memberi saya beberapa petunjuk tentang cara memperbaikinya saya akan sangat menghargai itu!


1
Apakah ini di MVC3 RC? Dapatkah Anda menunjukkan kepada kami seperti apa Produk itu? Saya tidak dapat mereproduksi di MVC3 RC
bmancini

Jawaban:


297

Sepertinya saya bahwa Anda memiliki pandangan yang tidak diketik. Secara default, tampilan Razor di MVC3 RC diketik sebagai dynamic. Namun, lambdas tidak mendukung anggota yang dinamis. Anda harus sangat mengetik model Anda. Di bagian atas file tampilan Anda tambahkan

@model SampleModel

11
itu adalah huruf besar m yang melakukannya untuk saya
siapa nama

bagaimana jika Anda memiliki model dot?
djack109

92

Kesalahan umum yang menjadi penyebabnya adalah saat Anda menambahkan

@Model SampleModel

di bagian atas halaman, bukan

@model SampleModel

5
Terima kasih telah menambahkan jawaban ini! Luar biasa bagaimana setelah bertahun-tahun pemrograman Anda bisa melupakan sensitivitas kasus.
brentlightsey

1
Juga dapat terjadi jika Anda menggunakan "model" alih-alih "@Model" ... yang akan dibuat tetapi gagal saat runtime.
Dave Remy

8

Di tautan ini, jelaskan tentang @ model, lihat kutipan:

@model(huruf kecil "m") adalah kata kunci yang dicadangkan dalam tampilan Razor untuk menyatakan jenis model di bagian atas tampilan Anda. Anda juga telah meletakkan namespace, misalnya:@model MyNamespace.Models.MyModel

Kemudian dalam file, Anda dapat referensi atribut yang Anda inginkan @Model.Attribute(huruf besar "M").


2
Ini masalah saya. Jika Anda tidak menonton dengan cermat, Visual Studio cenderung mengubah apa yang Anda ketikkan menjadi huruf "M". Ini sangat menjengkelkan.
RobbieE

7

Sepertinya tampilan Anda diketik dynamic. Tetapkan jenis yang tepat pada tampilan dan Anda akan melihat kesalahan hilang.


5

Sebelum menggunakan (sangat ketikkan bantuan html ke tampilan) baris ini

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

Anda harus memasukkan model Anda ke halaman Anda untuk membuat tampilan tipe sangat.

@model SampleModel

1

Kesalahan ini terjadi pada saya karena saya menggunakan model @@ alih-alih @ model ... salin & tempel kesalahan dalam kasus saya. Mengubah ke @model memperbaikinya untuk saya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.