2010-06-20 18 views
1

背景:
我試圖製作動態生成的資料單,其中每個資料單有多個ContentAreas,每個ContentArea配置爲包含多個Panels。如何在一個Controller的視圖調用另一個Controller的視圖時使數據可用?

我有一個FactsheetController,一個ContentAreaController,一個PanelController和單獨的面板如NameAndDate和AssetPanel

FactsheetController產生索引視圖充當模板加載ContentAreas中。

這是FactsheetController的索引,其中Model包含定義哪些面板與相關聯的配置數據,其ContentArea

<div id="divTop"> 
    <% Html.RenderAction("Top", "ContentArea", Model); %> 
</div> 
<div id="divLeftColumn"> 
    <% Html.RenderAction("Left", "ContentArea", Model); %> 
</div> 
<div id="divRightColumn"> 
    <% Html.RenderAction("Right", "ContentArea", Model); %> 
</div> 
<div id="divBottom"> 
    <% Html.RenderAction("Bottom", "ContentArea", Model); %> 
</div> 

Top動作方法被調用上ContentAreaController ,它將與該ContentArea相關聯的PanelConfigurations列表傳遞給其PartialView ,其定義爲:

<% foreach (ConfiguredFactsheetPanel panel in Model) 
    { %> 

    <% Html.RenderAction(panel.Name, "Panel", panel); %> 

<% } %> 

這個PartialView渲染然後呈現它配置顯示的每個面板。

當我加載FactsheetController我需要一個Fund對象的實例知道哪些ContentAreas與該特定Factsheet相關的,所以我創建基於QueryString數據之一。事情是,我還需要在PanelController中的Fund對象,因爲Fund對象包含我需要顯示的數據。 QueryString數據不存在於PanelController中,因爲它只存在於名爲FactsheetController的URL中。

問題:
所以我的問題是,什麼是對我做出Fund對象我在FactsheetController創建要在PanelController

可我也很想在聽取任何人的意見的最佳方式關於這個初始設計的問題。

回答

0

我不會使用那樣的查詢字符串。我將擴展傳遞給FactsheetController的索引的模型對象,以包含其他部分視圖中所需的數據,然後使用RenderAction方法將其傳遞給動作。因此,ConfiguredFactsheetPanel將被擴展爲包含您的部分視圖中所需的基金對象,或者由其包含的類型替換。

我懷疑當前視圖中使用的對象是由持久化技術(例如NHibernate或Entity Framework)驅動的實體。如果是這種情況,您可能不希望更改您的實體定義以滿足您的視圖,而是創建視圖模型。

相關問題