Проблема с другим типом модели в частичном представлении - PullRequest
5 голосов
/ 03 сентября 2011

У меня есть одна (бритва) страница, которая содержит 5 различных частичных просмотров. Каждое частичное представление отвечает за некоторые данные из базы данных. На этой главной странице я использую один объект модели, но для частичных представлений я использую разные объекты модели. Проблема в том, что когда я устанавливаю объект модели в частичном представлении, мое приложение разрывается со следующей ошибкой: Элемент модели, переданный в словарь, имеет тип 'MyProject.WebUI.Models.BigPageViewModel', but this dictionary requires a model item of type 'MyProject.WebUI.Models.StatisticsViewModel'.

Вот код: Это большая страница, которая содержит частичные просмотры:

@model MyProject.WebUI.Models.BigPageViewModel
@{
    Layout = "../Shared/_BigPage.cshtml";
}
...
@{Html.RenderPartial("../Data/StatisticsFeed");}
...

Это код контроллера. Для этого метода я создал частичное представление, которое должно отображаться на большой странице.

public ActionResult StatisticsFeed()
        {
            StatisticsViewModel cs = new StatisticsViewModel();
            cs.TotalData = (new StatisticsRepository()).GetStatisticCompleteData(1);
            return View(cs);
        }

И это код в частичном представлении:

@model MyProject.WebUI.Models.StatisticsViewModel
...

enter image description here

Я использовал метод 'RenderAction' вместо 'RenderPartial', и он возвращает значение, но возвращает мне два результата, один с данными, а другой без, это должно быть глупой ошибкой ...

public ActionResult StatisticsFeed()
        {
          StatisticsViewModel cs = new StatisticsViewModel();
                cs.TotalData = (new StatisticsRepository()).GetStatisticCompleteData(1);

            cs.TotalCitizns = 569;
            return View(cs);
        }

1 Ответ

7 голосов
/ 03 сентября 2011

Вам необходимо явно указать модель, передаваемую в частичное с использованием второго аргумента метода RenderPartial.Если вы не укажете это, родительская модель будет передана, и вы получите исключение:

@{Html.RenderPartial("../Data/StatisticsFeed", Model.SomePropertyOfTypeStatisticsViewModel);}

Другая возможность - использовать RenderAction :

@{Html.RenderAction("StatisticsFeed", "ControllerName");}

Это вызовет действие контроллера StatisticsFeed, которое само выберет модель из базы данных и отобразит результаты.

...