2011-09-12 3 views
30

Ho appena aggiunto una nuova area Admin al mio progetto poiché ha iniziato a diventare abbastanza grande e voglio mantenerlo strutturato.Come si gestiscono le aree MVC e RenderAction in diversi controller?

Ho una vista _ViewStart.cshtml che imposta una pagina di layout condivisa per includere un menu e una parte con alcune informazioni utente. Poiché non è stato aggiunto alla mia area, ho aggiunto il file _ViewStart anche alla mia area.

Questo file imposta il layout su "~/Views/Shared/_Layout.cshtml", che si trova all'esterno dell'area di amministrazione. Tuttavia, il file _Layout include un metodo RenderAction() che chiama un metodo di azione figlio sul controller per il rendering. Il problema è che l'area non sembrano avere la visibilità di questo controller e così getta la seguente eccezione:

The controller for path '/Admin/LeadOrigin' was not found or does not implement IController. 

Il punto in cui si è verificato anche se è qui:

Line 70:   <div id="logindisplay"> 
Line 71:    @{ 
Line 72:     Html.RenderAction("UserInfo", "Account");    
Line 73:    } 
Line 74:   </div> 

Il RenderAction() sopra funziona normalmente in quanto il controller dell'account è all'interno dell'ambito della vista, mentre nell'area di amministrazione, sembra che non abbia lo scopo di questo controller.

Qualche idea su come aggirare questo problema?

risposta

53

È possibile specificare l'area come parte del RouteValueDictionary (o solo oggetto di valori di percorso), che RenderAction prende come terzo parametro nel vostro caso:

Html.RenderAction("UserInfo", "Account", new { area = "" }); 

Ciò presuppone il controller account è nella radice la zona.