2011-09-03 79 views
5

我有一個(剃刀)頁面包含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); 
     } 

回答

7

您需要使用RenderPartial方法的第二個參數明確指定要傳遞給部分的模型。如果不指定它的父模型傳遞等異常你:

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

另一種可能性是使用RenderAction

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

這將調用StatisticsFeed控制器動作本身會從數據庫獲取模型並呈現結果。

+0

所以我需要在'bigPage'模型對象中有'統計'對象屬性? – 1110

+1

@ 1110,yeap。那麼,您必須將'StatisticsViewModel'的實例傳遞給您的部分,因爲這是它所期望的。你存儲的地方是另一個問題。它確實可以是您的主視圖模型的一個屬性。你也可以傳遞一個新的實例:'new StatisticsViewModel()'。 –

+0

如果我傳遞新對象,則該對象爲空。在我的問題的第二個代碼中,我填充具有該部分視圖數據的對象。當我在'bigPage'模型中有統計對象時,我的問題就解決了。所以我不能直接在局部視圖中注入控制器?因爲我擔心我的'bigPageViewModel'會太大。 – 1110