2012-05-26 15 views
27

Soy un principiante en Asp.Net MVC3. ¿Alguien puede explicar qué se entiende por este código:¿Qué significa este código de sección de renderizado?

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

En el artículo de ScottGu:

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

hay un ejemplo de RenderSection pero define @section y luego se utiliza algún lugar @RenderSection. En este caso, se define la cabeza de la sección y dentro de ella misma se está renderizando la misma cabeza que me confundió.

¿Qué hace RenderSection y cómo puedo encontrar lo que se está representando aquí?

Respuesta

34

de Scott escribió en un momento

El primer parámetro de la “RenderSection()” método de ayuda especifica el nombre de la sección que queremos hacer en ese lugar en la plantilla diseño. El segundo parámetro es opcional y nos permite definir si se requiere o no la sección que estamos procesando. Si se requiere una sección , Razor arrojará un error en el tiempo de ejecución si esa sección no está implementada dentro de una plantilla de vista basada en en el archivo de diseño (que puede facilitar el rastreo de errores de contenido ).

Por lo tanto, lo que RenderSection hace, es la representación de una sección definida en la plantilla/vista (no el _Layout general). Un poco más adelante en "Implementación de la sección" Barra lateral "en nuestra plantilla de vista" explica cómo implementar una sección.

Así que en general, lo que tiene es una sección llamada "cabeza" que representa una sección llamada "cabeza" en una vista que está más abajo/anidada.

Edición: eche un vistazo a http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx para ver lo que quiero decir con vistas anidadas, pero tenga en cuenta que este artículo tiene más de un año.

MasterLayout:

@RenderSection("head", false) 

SubLayout:

@{ 
    Layout = "~/Views/_MasterLayout.cshtml"; 
} 
@section head 
{ 
    RenderSection("head") 
} 

contenido:

@{ 
    Layout = "~/Views/_SubLayout.cshtml"; 
} 
@section head 
{ 
    <title>Content-Layout</title> 
} 
13

Defina la sección en una vista y ejecútela en _Layout.cshtml.

En su diseño (maestro) lugar página siguiente:

@RenderSection("head", false) 

En su lugar vista de la página siguiente:

@section head { 

PUT VIEW SPECIFIC CODE HERE 
} 

Aquí "cabeza" es el nombre de la sección que se puede definir en su ver pagina.

Es algo así como ContentPlaceHolder que usamos en asp.net webforms.

+1

entiendo eso, pero el código que he publicado define la cabeza '@section' y dentro de llaves llama otra vez RenderSection. ¿No debería definirse el encabezado '@section' en las páginas secundarias? –

Cuestiones relacionadas