2010-02-17 1 views
5

Я получаю следующее исключение при вызове Html.RenderPartial:Ошибка с сильно типизированным частичным видом, когда модель представляет собой свойство на родительскую модели и нулевая

Модели элемент передается в словарь типа «ChildClass», но для этого словаря требуется элемент модели типа «ParentClass».

Эти два класса связаны следующим образом:

public class ChildClass { /* properties */ } 

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

    /* other properties */ 
} 

У меня есть экземпляр ParentClass где значение ChildProperty является null.

У меня есть два частичных вида, ParentView (ViewUserControl<ParentClass>) и ChildView (ViewUserControl<ChildClass>).

В первый взгляд, я следующий ...

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

Это линия, которая бросает исключение, перечисленные в верхней части этого поста.

Я проверил правильную функциональность, если ChildProperty не является нулевым. Почему MVC считает, что нулевое значение этого свойства относится к родительскому типу?

Я могу обойти эту проблему, добавив код, который отображает только ChildView, если ChildProperty не является нулевым, но эта половина поражает точку зрения.

+0

Я не могу объяснить, сообщение об ошибке, но лучшее решение для этих типов проблем заключается в применении шаблона ** Null Object **: http://en.wikipedia.org/wiki/Null_Object_pattern –

ответ

5

Посмотрите ответ здесь: renderpartial with null model gets passed the wrong type

Если это работает, ваше исправление должно выглядеть следующим образом:

<% Html.RenderPartial("~/Views/Controls/ChildView.ascx", Model.ChildProperty, 
     new ViewDataDictionary()); %> 
Смежные вопросы