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!

femseks
sumber
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
marcind
sumber
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
felbus
sumber
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").

Charlestown
sumber
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.

Esteban Araya
sumber
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
Kuber
sumber
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.

JosephDoggie
sumber
0

Di vb.net Anda harus menulis @ModelType.

Perry
sumber