Problem with different model type in partial view

泪湿孤枕 提交于 2020-01-02 05:01:19

问题


I have one (razor) page that contain 5 different partial views. Each partial view is responsible for some data from database. In that master page I use one model object but for partial views I use different model objects. The problem is that when I set model object in partial view my application breaks with following error: The model item passed into the dictionary is of type 'MyProject.WebUI.Models.BigPageViewModel', but this dictionary requires a model item of type 'MyProject.WebUI.Models.StatisticsViewModel'.

Here is the code: This is the big page that contains partial views:

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

This is controller code. For this method I created partial view that should be rendered in big page.

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

And this is the code in partial view:

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

I used 'RenderAction' method instead of 'RenderPartial' and it return value but returns me two results one with data and one without, this must be some stupid mistake...

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

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

回答1:


You need to specify explicitly the model being passed to the partial using the second argument of the RenderPartial method. If you don't specify it the parent model is passed and so the exception you get:

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

Another possibility is to use RenderAction:

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

This will invoke the StatisticsFeed controller action which itself will fetch the model from the database and render the results.



来源:https://stackoverflow.com/questions/7292590/problem-with-different-model-type-in-partial-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!