2010-11-11 43 views
138

Tôi có một mô hình tương tự như sau:Razor View Engine: Một cây biểu hiện có thể không chứa một hoạt động năng động

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

Và trong bộ điều khiển của tôi, tôi nhận được một ngoại lệ cố gắng để in ra

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

Đây là lỗi:

Exception: An expression tree may not contain a dynamic operation 

Nếu có ai có thể cho tôi một số manh mối về cách khắc phục điều này, tôi thực sự đánh giá cao nó!

+1

Đây có phải là trên MVC3 RC? Bạn cũng có thể cho chúng tôi biết Sản phẩm trông như thế nào không? Tôi đã không thể tái sản xuất nó trong MVC3 RC – bmancini

Trả lời

242

Dường như với tôi rằng bạn có chế độ xem không được phân loại. Theo mặc định, chế độ xem Dao cạo trong MVC3 RC được nhập là dynamic. Tuy nhiên, lambdas không hỗ trợ các thành viên năng động. Bạn phải mạnh mẽ nhập mô hình của mình. Ở đầu tệp xem của bạn, hãy thêm

@model SampleModel 
+0

Cảm ơn bạn marcind. –

+0

wow cảm ơn, tôi đã vô tình gõ một số chữ cái trước @model của tôi ... – BigOmega

+5

nó là một chữ hoa m đã làm nó cho tôi – whossname

4

Có vẻ như chế độ xem của bạn được nhập dynamic. Đặt đúng loại trên chế độ xem và bạn sẽ thấy lỗi biến mất.

71

Một lỗi phổ biến mà là nguyên nhân của việc này là khi bạn thêm

@Model SampleModel 

ở phía trên cùng của trang thay vì

@model SampleModel 
+2

Cảm ơn bạn đã thêm câu trả lời này! Tuyệt vời như thế nào sau nhiều năm lập trình bạn có thể quên về trường hợp nhạy cảm. – brentlightsey

+0

Cũng có thể xảy ra nếu bạn sử dụng "mô hình" thay vì "@Model" ... mà sẽ xây dựng nhưng không thành công khi chạy. –

+0

Cảm ơn một triệu lần! –

0

Lỗi này xảy ra với tôi vì tôi đã có @@ mô hình thay vì @model ... sao chép & dán lỗi trong trường hợp của tôi. Thay đổi thành @model đã sửa nó cho tôi.

4

Trước khi sử dụng (gõ mạnh html helper vào xem) dòng này

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

Bạn nên bao gồm mô hình của bạn vào bạn trang để làm mạnh mẽ gõ xem.

@model SampleModel 
6

Trong link này giải thích về @model, xem một trích đoạn:

@model (lowercase "m") is a reserved keyword in Razor views to declare the model type at the top of your view. You have put the namespace too, e.g.: @model MyNamespace.Models.MyModel

Later in the file, you can reference the attribute you want with @Model.Attribute (uppercase "M").

+0

Đây là vấn đề của tôi. Nếu bạn không xem cẩn thận, Visual Studio có xu hướng chuyển đổi những gì bạn đang gõ vào thủ đô "M". Nó thực sự khó chịu. – RobbieE

Các vấn đề liên quan