Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 局部视图中不同模型类型的问题_Asp.net Mvc_Asp.net Mvc 3_Partial Views - Fatal编程技术网

Asp.net mvc 局部视图中不同模型类型的问题

Asp.net mvc 局部视图中不同模型类型的问题,asp.net-mvc,asp.net-mvc-3,partial-views,Asp.net Mvc,Asp.net Mvc 3,Partial Views,我有一个(剃刀)页面,其中包含5个不同的局部视图。每个局部视图负责数据库中的一些数据。在该母版页中,我使用一个模型对象,但对于局部视图,我使用不同的模型对象。问题是,当我在局部视图中设置模型对象时,我的应用程序会出现以下错误: 传递到字典中的模型项的类型为“MyProject.WebUI.Models.BigPageViewModel”,但此字典需要类型为“MyProject.WebUI.Models.StatisticsViewModel”的模型项。 代码如下: 这是包含部分视图的大页面: @

我有一个(剃刀)页面,其中包含5个不同的局部视图。每个局部视图负责数据库中的一些数据。在该母版页中,我使用一个模型对象,但对于局部视图,我使用不同的模型对象。问题是,当我在局部视图中设置模型对象时,我的应用程序会出现以下错误: 传递到字典中的模型项的类型为“MyProject.WebUI.Models.BigPageViewModel”,但此字典需要类型为“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
...

我使用了“RenderAction”方法而不是“RenderPartial”,它返回值,但返回两个结果,一个有数据,一个没有,这一定是个愚蠢的错误

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

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

您需要使用
RenderPartial
方法的第二个参数明确指定传递给partial的模型。如果未指定,则会传递父模型,因此会出现异常:

@{Html.RenderPartial("../Data/StatisticsFeed", Model.SomePropertyOfTypeStatisticsViewModel);}
另一种可能性是使用:


这将调用
StatisticsFeed
controller操作,该操作本身将从数据库中获取模型并呈现结果。

因此我需要在我的“bigPage”模型对象中具有“Statistic”对象属性?@1110,yeap。那么,您必须将
StatisticsViewModel
的一个实例传递给您的partial,因为这是它所期望的。在哪里存储是另一个问题。它确实可能是主视图模型上的一个属性。您还可以传递一个新实例:
newstatisticsviewmodel()
。如果传递新对象,则该对象为空。在问题的第二段代码中,我填充了包含该局部视图数据的对象。当我在“bigPage”模型中有统计对象时,我的问题就解决了。所以在我的局部视图中,我无法直接从控制器中注入?因为我担心我的“bigPageViewModel”太大了。@1110,您可以使用RenderAction而不是RenderPartial,如下所示:
@{Html.RenderAction(“统计提要”,“控制器名称”);}
。这将执行控制器操作并渲染部分。我已经更新了我的答案,包括一个例子。谢谢你们,我不知道渲染,我很接近结果,因为我收到了值:)。但我现在收到两个结果,一个有数据,一个没有,我已经更新了问题,你们能检查一下我的代码中一定有一些小错误吗?
@{Html.RenderAction("StatisticsFeed", "ControllerName");}