2011-09-29 7 views
13

Ho un _Layout.cshtml di livello superiore che sembra qualcosa di simile:In Rasoio MVC, come si fa una RenderSection definita sotto un sotto-layout?

<html> 
<head> 
    @RenderSection("Header", required: false) 
</head> 
<body> 

    @RenderSection("LeftPane", required: false) 
    @RenderSection("RightPane", required: false) 
    @RenderBody() 

</body> 
</html> 

allora ho due "sotto-layout." Uno definisce solo la sezione LeftPane, l'altro definisce sia un LeftPane che un RightPane. Questi sotto-layout sono chiamati _LeftPane.cshtml e _LeftPlusRightPane.cshtml e hanno il layout impostato su "_Layout.cshtml".

Quindi in ciascun file Visualizza .cshtml, ho impostato il layout su _LeftPane.cshtml o _LeftPlusRightPane.cshtml, a seconda di cosa voglio visualizzare sulla pagina.

Che tutto funzioni correttamente. Il problema è con la nuova sezione "Intestazione" che ho aggiunto nella parte <head> del documento. Questa sezione non è definita nei layout secondari, ma nelle Visualizzazioni reali. Quando provo a visualizzare qualcosa in questo modo, viene visualizzato l'errore:

Le seguenti sezioni sono state definite ma non sono state visualizzate per la pagina di layout "~/Views/Shared/_LeftPlusRightPane.cshtml": "Intestazione".

Non voglio eseguire il rendering della sezione Intestazione nei sottofinestri, voglio renderlo disponibile nel file _Layout.cshtml. Come faccio a "passare attraverso" la sezione Intestazione definita dalla vista di basso livello, attraverso i layout secondari, fino alla parte superiore _Layout?

+0

È possibile incollare l'aspetto delle sezioni? Penso che non stai semplicemente avvolgendo le sezioni nelle singole viste in modo corretto. – Fourth

+0

L'unica sezione con cui ho un problema è la nuova sezione Intestazione. Un esempio di uno dal mio punto di vista: Intestazione @section { } –

risposta

25

È possibile nidificare i layout. Quindi _Layout2 ha Layout = "_Layout.cshtml";

È inoltre possibile utilizzare i file _ViewStart in ciascuna delle sottocartelle di View per specificare un layout predefinito diverso per tale sottocartella.

di "passare attraverso" la sezione, basta fare qualcosa di simile:

@section Header {@RenderSection("Header", false)} 

che permette di passare i contenuti a monte della catena.

+0

Grazie, che è esattamente quello che ero cercando di fare! –

+0

Fantastico, lo stavo solo cercando, grazie mille! – vtortola

+0

Grazie, è molto utile per me – MNR

Problemi correlati