Razor View Engine: ทรีนิพจน์อาจไม่มีการดำเนินการแบบไดนามิก


173

ฉันมีรูปแบบคล้ายกับสิ่งนี้:

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

และในตัวควบคุมของฉันฉันได้รับข้อยกเว้นพยายามพิมพ์ออกมา

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

นี่เป็นข้อผิดพลาด:

Exception: An expression tree may not contain a dynamic operation

หากใครสามารถให้เบาะแสกับฉันเกี่ยวกับวิธีการแก้ไขปัญหานี้ฉันจะขอบคุณมันจริงๆ!


1
สิ่งนี้อยู่ใน MVC3 RC หรือไม่ คุณสามารถแสดงให้เราเห็นว่าสินค้ามีลักษณะอย่างไร ฉันไม่สามารถทำซ้ำได้ใน MVC3 RC
bmancini

คำตอบ:


297

ดูเหมือนว่าคุณมีมุมมองที่ไม่พิมพ์ โดยค่าเริ่มต้นมุมมองมีดโกนใน MVC3 RC dynamicจะพิมพ์เป็น อย่างไรก็ตาม lambdas ไม่สนับสนุนสมาชิกแบบไดนามิก คุณต้องพิมพ์โมเดลของคุณอย่างยิ่ง ที่ด้านบนของไฟล์มุมมองของคุณเพิ่ม

@model SampleModel

11
มันเป็นตัวพิมพ์ใหญ่ที่ทำเพื่อฉัน
whossname

ถ้าคุณดอทมีโมเดลล่ะ?
djack109

92

ข้อผิดพลาดทั่วไปที่เป็นสาเหตุของปัญหานี้คือเมื่อคุณเพิ่ม

@Model SampleModel

ที่ด้านบนของหน้าแทน

@model SampleModel

5
ขอบคุณที่ผนวกคำตอบนี้! น่าประหลาดใจว่าหลังจากเขียนโปรแกรมมาหลายปีแล้วคุณสามารถลืมเรื่องตัวพิมพ์เล็ก
brentlightsey

1
นอกจากนี้ยังสามารถเกิดขึ้นได้หากคุณใช้ "model" แทน "@Model" ... ซึ่งจะสร้าง แต่ล้มเหลวขณะรันไทม์
Dave Remy

8

ในลิงค์นี้จะอธิบายเกี่ยวกับ @model ดูข้อความที่ตัดตอนมา:

@model(ตัวพิมพ์เล็ก "m") เป็นคำหลักที่สงวนไว้ในมุมมองมีดโกนเพื่อประกาศประเภทรุ่นที่ด้านบนของมุมมองของคุณ คุณใส่เนมสเปซด้วยเช่น:@model MyNamespace.Models.MyModel

หลังจากนั้นในไฟล์คุณสามารถอ้างอิงแอททริบิวที่คุณต้องการด้วย @Model.Attribute(ตัวพิมพ์ใหญ่ "M")


2
นี่เป็นปัญหาของฉัน หากคุณไม่ได้ดูอย่างรอบคอบ Visual Studio มีแนวโน้มที่จะแปลงสิ่งที่คุณกำลังพิมพ์ลงในตัวพิมพ์ใหญ่ "M" มันน่ารำคาญจริงๆ
RobbieE

7

dynamicดูเหมือนว่ามุมมองของคุณถูกพิมพ์ ตั้งค่าประเภทที่ถูกต้องในมุมมองและคุณจะเห็นข้อผิดพลาดหายไป


5

ก่อนที่จะใช้ (ขอให้พิมพ์ html helper ในมุมมอง) บรรทัดนี้

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

คุณควรรวมโมเดลของคุณไว้ในหน้าของคุณเพื่อสร้างมุมมองที่ชัดเจน

@model SampleModel

1

ข้อผิดพลาดนี้เกิดขึ้นกับฉันเพราะฉันมีรูปแบบ @@ แทนที่จะเป็น @model ... ข้อผิดพลาดการคัดลอกและวางในกรณีของฉัน การเปลี่ยนเป็น @model แก้ไขให้ฉันด้วย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.