2011-10-18 13 views
33

Estoy tratando de separar todas las cosas que podría reutilizar en secciones, por lo que sería más fácil para mí mantener.El archivo "~/Views/Position/Edit.cshtml" no se puede solicitar directamente porque llama al método "RenderSection"

Sin embargo tengo esta excepción: El archivo "~/Vistas/Posición/Edit.cshtml" no se pueden solicitar directamente, ya que llama al método "RenderSection"

he creado un archivo llamado sections.cshtml con el siguiente contenido:

@section scripts{ 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
} 

Y en el archivo _layout.cshtml lo cambié a:

<head> 
    <meta charset="utf-8" /> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    @RenderSection("scripts", required:false) 
    @*<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>*@ 
</head> 

Cuando voy a la vista en el navegador y compruebe el código fuente que se muestra solo:

<head> 
    <meta charset="utf-8" /> 
    <title>Edit</title> 
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 
+0

Por qué no sólo hay que poner los scripts en el archivo de diseño? – samack

+0

solo intenta aprender a usar las secciones en mvc, pero eso también es una opción, pero ¿qué pasa si algunas secuencias de comandos se utilizarán en algunas vistas y otras en otras vistas? Las secciones resolverían esto pero el archivo de diseño no lo resolvería, ¿verdad? –

+0

Deshágase de @RenderSection y simplemente coloque los scripts ... ese es el sentido del archivo de diseño para almacenar estos elementos que son comunes en la mayoría de sus páginas. – samack

Respuesta

32

RenderSection solo puede existir en los archivos de diseño (es decir páginas maestras) ... su propósito es permitir que las páginas que puede solicitar directamente se dirijan a varias secciones de un Diseño (el diseño es un archivo común a todas las páginas que eligen usarlo) y suministrar contenido para estas diferentes secciones.

Si desea separar esta sección como algo que es resuable en muchas páginas que debe ponerlo en un parcial y vuelva a colocar la llamada rendersection a algo así como

@Html.Partial("Scripts") 
+1

por favor revise la edición, traté de hacerlo utilizando el archivo de diseño en lugar de vistas parciales y no funciona, tampoco me sale una excepción. –

+0

Si cambio la sección requerida a verdadera, me da esta excepción: Sección no definida: "scripts", ¿Necesito ubicar la sección en otro lugar? –

+0

Esto se debe a que el archivo que solicite directamente debería tener una sección marcada como @section script {....} con .... que contiene el contenido de lo que debería ir al archivo de Diseño en el punto donde @RenderSection ("scripts") se llama ... las secciones no son para definir una funcionalidad común. Los parciales son para –

12

Como alternativa puede usar helper para separar código lo usas más a menudo Especialmente si no puede usar sections debido a la restricción mencionada por martin-mooth.

@helper Scripts(){ 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
} 

y el uso es simplemente:

<somehtml /> 
@Scripts() 
<somehtml /> 
+3

¿Y qué ocurre si se supone que los scripts van en la etiqueta ? –

Cuestiones relacionadas