ASP.NET MVC: ¿Cuál es el propósito de @section? [cerrado]

132

Para una aplicación ASP.NET MVC, vi este artículo de blog . El autor ScottGu agrega @sectional Index.cshtml.

Tengo un par de preguntas (en referencia al artículo anterior):

  • ¿Index.cshtml es una vista compartida?
  • El código de ejemplo usa @sectioncódigo en una vista particular. ¿Por qué?

¿Alguien puede explicar por qué y cuándo usaría @sectionen una Vista?

Un falso
fuente
44
Eche un vistazo a este tutorial: weblogs.asp.net/scottgu/archive/2010/12/30/…
Adriano Repetti
1
Si bien puede argumentarse que una mejor razón de cierre hoy estaría "principalmente basada en la opinión", todavía estaría cerrada. No hay una forma definitiva de usar secciones.
Richard
2
No hay una forma definitiva de usar nada. Solo mira cómo las personas usan Internet ...
keji

Respuestas:

138

@sectiones para definir un contenido que se anula desde una vista compartida. Básicamente, es una forma de ajustar su vista compartida (similar a una página maestra en formularios web).

Puede encontrar la redacción de Scott Gu sobre esto muy interesante .

Editar: Basado en aclaraciones de preguntas adicionales

La @RenderSectionsintaxis entra en la Vista compartida, como:

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

Esto se colocaría en su vista con la @Sectionsintaxis:

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

En MVC3 + puede definir el archivo de diseño que se utilizará para la vista directamente o puede tener una vista predeterminada para todas las vistas.

La configuración de vista común se puede establecer en _ViewStart.cshtml que define la vista de diseño predeterminada similar a esta:

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

También puede configurar la Vista compartida para usarla directamente en el archivo, como index.cshtml directamente como se muestra en este fragmento.

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

Hay una variedad de formas en que puede ajustar esta configuración con algunas más mencionadas en esta respuesta SO .

Frazell Thomas
fuente
Gracias Frazell! Agregué más a mi pregunta en referencia a ese tutorial. ¿Puedes explicar más? ¡Gracias de nuevo!
Un falso
Hola @ABogus, actualicé la respuesta. Esperemos que esta información adicional sea útil :)
Frazell Thomas
21

Un buen ejemplo es Javascript. Desea que esté en la parte inferior de la página que se muestra en el navegador porque esta es la mejor práctica.

¿Cómo haría esto desde una Vista basada en un Diseño / Página maestra donde solo puede acceder a la mitad de la página?

Para ello, declara una sección de Scripts en la parte inferior de la página Diseño. Luego puede agregar contenido, en este caso, Javascript incluye (¡espero!), Desde su página Ver hasta la parte inferior de su página de diseño.

John Mc
fuente
4

Desea usar secciones cuando desea que se procese un poco de código / contenido en un marcador de posición que se ha definido en una página de diseño.

En el ejemplo específico que vinculó, él ha definido RenderSection en _Layout.cshtml. Cualquier vista que use ese diseño puede definir una @sección del mismo nombre que se define en Diseño, y reemplazará la llamada RenderSection en el diseño.

¿Quizás se esté preguntando cómo sabemos que Index.cshtml usa ese diseño? Esto se debe a un poco de la convención MVC / Razor. Si observa el cuadro de diálogo en el que está agregando la vista, la casilla "Usar diseño o página maestra" está marcada, y justo debajo dice "Dejar en blanco si está configurado en un archivo Razor _viewstart". No se muestra, pero dentro de ese archivo _ViewStart.cshtml hay un código como:

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

La forma en que funciona viewstarts es que cualquier archivo cshtml dentro del mismo directorio o directorios secundarios ejecutará ViewStart antes de que se ejecute.

Que es lo que nos dice que Index.cshtml usa Shared / _Layout.cshtml.

ischell
fuente
Buena explicación de _ViewStart.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
3

Le permite definir un @Sectioncódigo en su plantilla que luego puede incluir en otros archivos. Por ejemplo, una barra lateral definida en la plantilla, podría ser referenciada en otra vista incluida.

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

Espero que esto ayude.

chrislhardin
fuente