2010-06-20 40 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)驱动的实体。如果是这种情况,您可能不希望更改您的实体定义以满足您的视图,而是创建视图模型。

相关问题