2010-02-17 9 views
5

Tôi nhận được ngoại lệ sau đây trên một cuộc gọi đến Html.RenderPartial:Lỗi với quan điểm một phần mạnh mẽ, đánh máy khi mô hình này là một tài sản trên một mô hình phụ huynh và là null

Mô hình mục đã qua vào từ điển là loại 'ChildClass' nhưng từ điển này yêu cầu một mục mẫu của loại 'ParentClass'.

Hai lớp học có liên quan này:

public class ChildClass { /* properties */ } 

public class ParentClass 
{ 
    public ChildClass ChildProperty { get; set; } 

    /* other properties */ 
} 

Tôi có một thể hiện của ParentClass nơi giá trị của ChildPropertynull.

Tôi có hai chế độ xem một phần, ParentView (ViewUserControl<ParentClass>) và ChildView (ViewUserControl<ChildClass>).

Trong giao diện đầu tiên, tôi đã sau ...

<% Html.RenderPartial("~/Views/Controls/ChildView.ascx", Model.ChildProperty); %> 

Đây là dòng được ném ngoại lệ được liệt kê ở đầu của bài viết này.

Tôi đã xác minh chức năng chính xác nếu ChildProperty không phải là rỗng. Tại sao MVC nghĩ rằng giá trị null của thuộc tính này là của kiểu gốc?

Tôi có thể khắc phục sự cố này bằng cách thêm mã chỉ hiển thị ChildView nếu ChildProperty không phải là rỗng, nhưng nửa này đánh bại quan điểm có chế độ xem.

+0

Tôi không thể giải thích được thông báo lỗi, nhưng giải pháp tốt nhất cho các loại các vấn đề là áp dụng mẫu ** Null Object **: http://en.wikipedia.org/wiki/Null_Object_pattern –

Trả lời

5

Hãy nhìn vào câu trả lời ở đây: renderpartial with null model gets passed the wrong type

Nếu nó hoạt động, sửa chữa của bạn sẽ giống như thế này:

<% Html.RenderPartial("~/Views/Controls/ChildView.ascx", Model.ChildProperty, 
     new ViewDataDictionary()); %>