ASP.NET MVC: Qual è lo scopo di @section? [chiuso]


132

Per un'applicazione ASP.NET MVC, ho visto questo articolo del blog . L'autore ScottGu aggiunge @sectiona Index.cshtml.

Ho un paio di domande (facendo riferimento all'articolo sopra):

  • Index.cshtml è una vista condivisa?
  • Il codice di esempio utilizza il @sectioncodice in una vista particolare. Perché?

Qualcuno può spiegare perché e quando dovrei usare @sectionin una vista?



1
Mentre si può sostenere che un motivo di chiusura migliore oggi sarebbe "principalmente basato sull'opinione", sarebbe comunque chiuso. Non esiste un modo definitivo per utilizzare le sezioni.
Richard,

2
Non esiste un modo definitivo per utilizzare nulla. Guarda come la gente usa Internet ...
keji,

Risposte:


138

@sectionè per la definizione di un contenuto vengono sostituiti da una vista condivisa. Fondamentalmente, è un modo per regolare la vista condivisa (simile a una pagina master in Web Form).

Potresti trovare Scott Gu scrivere su questo molto interessante .

Modifica: basato su ulteriori chiarimenti sulle domande

La @RenderSectionsintassi va nella vista condivisa, ad esempio:

<div id="sidebar">
    @RenderSection("Sidebar", required: false)
</div>

Questo verrebbe quindi inserito nella tua vista con la @Sectionsintassi:

@section Sidebar{
    <!-- Content Here -->
}

In MVC3 + è possibile definire il file di layout da utilizzare direttamente per la vista oppure è possibile avere una vista predefinita per tutte le viste.

Le impostazioni della vista comune possono essere impostate in _ViewStart.cshtml che definisce la vista di layout predefinita simile a questa:

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

Puoi anche impostare la visualizzazione condivisa per utilizzarla direttamente nel file, ad esempio index.cshtml direttamente come mostrato in questo frammento.

@{
    ViewBag.Title = "Corporate Homepage";
    ViewBag.BodyID = "page-home";
    Layout = "~/Views/Shared/_Layout2.cshtml";
}

Esistono diversi modi per regolare questa impostazione con alcuni altri menzionati in questa risposta SO .


Grazie Frazell! Ho aggiunto altro alla mia domanda in riferimento a quel tutorial. Puoi spiegare ulteriormente? Grazie ancora!
A Bogus,

Ehi @ABogus ho aggiornato la risposta. Speriamo che queste informazioni aggiuntive siano utili :)
Frazell Thomas,

21

Un buon esempio è Javascript. Si desidera che si trovi nella parte inferiore della pagina visualizzata nel browser perché questa è la migliore pratica.

Come faresti da una vista basata su un layout / pagina principale in cui puoi accedere solo al centro della pagina?

Puoi farlo dichiarando una sezione Script nella parte inferiore della pagina Layout. Quindi puoi aggiungere contenuti, in questo caso Javascript include (spero!), Dalla tua pagina di visualizzazione alla fine della pagina di layout.


4

Si desidera utilizzare le sezioni quando si desidera eseguire il rendering di un po 'di codice / contenuto in un segnaposto che è stato definito in una pagina di layout.

Nell'esempio specifico che hai collegato, ha definito RenderSection in _Layout.cshtml. Qualsiasi vista che utilizza quel layout può definire una sezione @ con lo stesso nome definito in Layout e sostituirà la chiamata RenderSection nel layout.

Forse ti stai chiedendo come sappiamo che Index.cshtml usa quel layout? Ciò è dovuto a un po 'di convenzione MVC / Razor. Se guardi la finestra di dialogo in cui sta aggiungendo la vista, la casella "Usa layout o pagina principale" è selezionata e appena sotto dice "Lascia vuoto se è impostato in un file _viewstart di Razor". Non viene mostrato, ma all'interno di quel file _ViewStart.cshtml c'è un codice simile a:

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

Il modo in cui viewstarts funziona è che qualsiasi file cshtml all'interno della stessa directory o directory figlio eseguirà ViewStart prima che venga eseguito automaticamente.

Questo è ciò che ci dice che Index.cshtml utilizza Shared / _Layout.cshtml.


Bella spiegazione di _ViewStart.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

3

Ti consente di definire un @Sectioncodice nel tuo modello che puoi quindi includere in altri file. Ad esempio, è possibile fare riferimento a una barra laterale definita nel modello in un'altra vista inclusa.

//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);

Spero che questo ti aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.