2013-05-17 15 views
12

Se ho una pagina con:È possibile rendere facoltative le sezioni del rasoio?

<body> 
    @section SomeStuff { 
     <span>This is a section I just addered</span> 
    } 

</body> 

E 'possibile per il layout di non rendere questa sezione, o è che contrariamente a come questo dovrebbe funzionare concettualmente. Sembra che sarebbe utile essere in grado di non rendere certe sezioni su una pagina (a meno che non stia pensando a questo in modo errato).

Edit:

Compreso il messaggio di errore può essere utile, quando ho messo una sezione nella principale pagina , la pagina layout di fallisce con: The following sections have been defined but have not been rendered for the layout page "/Views/Layouts/_Layout1.cshtml": "SomeStuff". Come se mi sta costringendo a rendere ogni sezione sulla pagina o qualcosa del genere.

In altri termini, in Layout.cshtml, io non chiamata @RenderSection, ma in Index.HTML ho una sezione chiamata SomeStuff definito. È legale? Sembra che mi costringa a rendere tutte le sezioni della pagina, ma sembra che le sezioni dovrebbero essere opzionali, no?

+1

Intendi come un'istruzione 'if'? – musefan

+1

Anche io amo le creature sommerse –

+0

@daveL - le grandi menti pensano allo stesso modo. – sircodesalot

risposta

22

è possibile specificare se è richiesta una sezione.

@RenderSection("SomeStuff", required: false) 

se non rendere in una visione, non dovrebbe errore quindi, ha osservato qui

http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

+0

Come può essere questa la risposta accettata? Si tratta di un'altra domanda!È il contrario: definisco una sezione nella vista, quindi non la uso nel layout - posso farlo? – Simone

+0

@Simone: http://stackoverflow.com/a/8041081/70345 –

0

Si potrebbe fare:

@if (condition) { 
    @RenderSection("SomeStuff") 
    } 

O semplicemente utilizzare un conditional statement direttamente piuttosto che @RenderSection:

@if (yourCondition) { 
    <span>This is a section I just addered</span> 
} 
+0

Forse sto facendo qualcosa di sbagliato, ma quando inserisco la sezione nella pagina * main *, la pagina * layout * fallisce perché non chiama '@RenderSection (" SomeStuff ")'. Sembra che il rendering delle sezioni dovrebbe essere opzionale, ma non si comporta come è. – sircodesalot

+0

Ottengo 'Le seguenti sezioni sono state definite ma non sono state renderizzate per la pagina di layout" /Views/Layouts/_Layout1.cshtml ":" SomeStuff ". Sembra che mi costringa a eseguire il rendering della sezione. – sircodesalot

+0

@ sircodesalot - Credo che il layout voglia includere @RenderSection ("SomeStuff") ... potresti inserire la tua condizione nel layout e chiamarla lì (come ti ho mostrato) .... o semplicemente usare '@ if (yourCondition) {} 'direttamente nella pagina (nessuna sezione necessaria) che non coinvolga la pagina' layout'. –

6

Per un certo layout non rendere certa sezione è necessario avere qualcosa di simile è il tuo layout.cshtml

@RenderSection("Somestuff", required:false) 
5

È possibile impostare una sezione su Opzionale impostando il parametro richiesto su falso. Se desideri includere alcuni HTML di wrapper opzionali nella tua sezione, puoi anche utilizzare il metodo IsSectionDefined.

@if(IsSectionDefined("SideBar")) 
{ 
    <div class="sidebar"> 
     @RenderSection("SideBar", required: false) 
    </div> 
} 
Problemi correlati