背景
我正在尝试生成动态生成的Factsheets,其中每个Factsheet都有许多ContentAreas,每个ContentArea都配置为包含许多Panel。
我有一个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
操作方法时,它会将与PanelConfigurations
相关联的ContentArea
列表传递给其PartialView
,该列表已定义为:
<% foreach (ConfiguredFactsheetPanel panel in Model)
{ %>
<% Html.RenderAction(panel.Name, "Panel", panel); %>
<% } %>
这个PartialView
呈现然后渲染它配置为显示的每个面板。
当我加载FactsheetController
时,我需要一个Fund
对象的实例,以了解哪个ContentAreas
与该特定Factsheet
相关联,因此我创建了一个QueryString
在Fund
数据上。问题是,我还需要PanelController
中的Fund
对象,因为QueryString
对象包含我需要显示的数据。 PanelController
中不存在FactsheetController
数据,因为它仅存在于调用Fund
的网址中。
问题:
所以我的问题是,对于我在FactsheetController
中创建的PanelController
对象在{{1}}
我也有兴趣听听任何人对这个初步设计问题的意见。
答案 0 :(得分:0)
我不会使用这样的查询字符串。我将扩展传递给FactsheetController的索引的模型对象,以包含其他部分视图中所需的数据,然后将其传递给使用RenderAction方法的操作。因此,ConfiguredFactsheetPanel将扩展为包含或替换为包含部分视图中所需的Fund对象的类型。
我怀疑您在视图中使用的对象当前是由您的持久性技术(如NHibernate或Entity Framework)驱动的实体。如果是这种情况,您可能不希望更改实体定义以满足您的视图,而是创建视图模型。