Ошибка со строго типизированным частичным представлением, когда модель является свойством родительской модели и имеет значение NULL

Я получаю следующее исключение при вызове 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 не равно нулю, но эта половина сводит на нет точку зрения на представление.


person Richard Ev    schedule 17.02.2010    source источник
comment
Я не могу объяснить сообщение об ошибке, но лучшее решение этих проблем - применить шаблон нулевого объекта: en.wikipedia.org/wiki/Null_Object_pattern   -  person Mark Seemann    schedule 17.02.2010


Ответы (1)


Посмотрите ответ здесь: renderpartial с нулевой моделью передается неправильный тип

Если это сработает, ваше исправление должно выглядеть так:

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