2012-02-16 14 views
6

Tengo un _ViewStart que define el diseño maestro para mi proyecto (encabezado, pie de página).Usando _ViewStart en áreas para contenido anidado

En este proyecto, tengo varias áreas. Cada área tiene el mismo encabezado y pie de página, además de su propio menú lateral. Para eso, creé un _ViewStart en el directorio raíz de esa área. Aquí está el (simplificado) Código:

/Views/_ViewStart.cshtml

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

/Views/Shared/_Layout.cshtml

<html> 
     <div> 
      //header 
     </div> 
     <div> 
      @RenderBody 
     </div> 
    </html> 

zona Foo ->/áreas/foo/Vistas /_ViewStart.cshtml

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<div class="row"> 
<div class="sidemenu"> 
    //default sidemenu for this area 
</div> 
<div> 
     @RenderBody() 
</div> 
</div> 

La página /Areas/Foo/Views/Bar/Index.cshtml no va a prestar y me sale este error:

CS0103: El nombre 'RenderBody' no existe en el contexto actual

Cómo lograr este tipo de página maestra de anidación?

Respuesta

9

odio a responder a mi propia pregunta, pero aquí va:

No puede hacer referencia _ViewStart raíz del sitio directamente en la _ViewStart de su área si quieres un RenderBody allí.

Así que la solución es:

/Views/_ViewStart.cshtml referencias /Views/Shared/_MainLayout.cshtml

/Areas/Foo/Views/_ViewStart.cshtml referencias /Areas/Foo/Views/Shared/_AreaLayout.cshtml

/Areas/Foo/Views/Shared/_AreaLayout.cshtml referencias /Views/Shared/_MainLayout.cshtml

Y eso es todo. Tienes que usar la carpeta "Compartida" para tener el método "RenderBody()" disponible.

Cuestiones relacionadas