2012-02-16 10 views
6

Ho un _ViewStart che definisce il layout principale per il mio progetto (intestazione, piè di pagina).Utilizzo di _ViewStart su aree per contenuto annidato

In questo progetto, ho diverse aree. Ogni area ha la stessa intestazione e il piè di pagina, oltre al proprio menu laterale. Per questo, ho creato un _ViewStart nella directory principale di quell'area. Ecco il codice (semplificato):

/Views/_ViewStart.cshtml

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

/Views/Shared/_Layout.cshtml

<html> 
     <div> 
      //header 
     </div> 
     <div> 
      @RenderBody 
     </div> 
    </html> 

Area Foo ->/Aree/Foo/Vista /_ViewStart.cshtml

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<div class="row"> 
<div class="sidemenu"> 
    //default sidemenu for this area 
</div> 
<div> 
     @RenderBody() 
</div> 
</div> 

La pagina /Areas/Foo/Views/Bar/Index.cshtml non renda e ottengo questo errore:

CS0103: Il nome 'RenderBody' non esiste nel contesto corrente

Come raggiungere questo tipo di pagina master nidificazione?

risposta

9

Odio rispondere alla mia domanda, ma qui va:

Non è possibile fare riferimento _ViewStart principale del sito direttamente sul _ViewStart della vostra zona, se si vuole un RenderBody lì.

Quindi la soluzione è:

/Views/_ViewStart.cshtml riferimenti /Views/Shared/_MainLayout.cshtml

/Areas/Foo/Views/_ViewStart.cshtml riferimenti /Areas/Foo/Views/Shared/_AreaLayout.cshtml

/Areas/Foo/Views/Shared/_AreaLayout.cshtml riferimenti /Views/Shared/_MainLayout.cshtml

E questo è tutto. Devi usare la cartella "Shared" per avere il metodo "RenderBody()" disponibile.