views:

46

answers:

1

Background:
I'm trying to produce dynamically generated Factsheets, where each Factsheet has a number of ContentAreas, and each ContentArea is configured to contain a number of Panels.

I have a FactsheetController, a ContentAreaController, a PanelController and individual panels such as NameAndDate and AssetPanel

FactsheetController produces an Index View which acts as a template to load ContentAreas in to.

This is FactsheetController's Index, where Model contains the configuration data defining which panels are associated with which 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>

When the Top action method gets called on ContentAreaController, it passes a list of PanelConfigurations associated with that ContentArea to its PartialView, which is defined as:

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

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

<% } %>

This PartialView renders then renders each panel that it is configured to show.

When I'm loading the FactsheetController I need an instance of a Fund object to know which ContentAreas are associated with that particular Factsheet, so I create one based on QueryString data. The thing is, I also need that Fund object in the PanelController because the Fund object contains the data I need to display. That QueryString data doesn't exist in the PanelController, because it only existed in the URL that called FactsheetController.

question:
So my question is, what's the best way for me to make the Fund object I create in FactsheetController to be available in the PanelController

I'd also be interested in hearing anyone's opinion on issues with this initial design.

A: 

I wouldn't use query strings like that. I would extend the model object passed to FactsheetController's Index to include the data required in your other partial views and then pass that to the actions with the RenderAction method. So ConfiguredFactsheetPanel would be extended to either contain, or be replaced by a type that contained, the Fund object you require in your partial views.

I suspect that the objects that you are using in your view currently are entities driven by your persistence technology such as NHibernate or Entity Framework. If this is the case you probably won't want to change your entity definitions to satisfy your views and instead create view models.

s1mm0t