Inyectar contenido en secciones específicas desde una vista parcial ASP.NET MVC 3 con Razor View Engine

Resuelto tugberk asked hace 12 años • 23 respuestas

Tengo esta sección definida en mi_Layout.cshtml

@RenderSection("Scripts", false)

Puedo usarlo fácilmente desde una vista:

@section Scripts { 
    @*Stuff comes here*@
}

Lo que estoy luchando es cómo insertar contenido dentro de esta sección desde una vista parcial.

Supongamos que esta es mi página de visualización:

@section Scripts { 

    <script>
        //code comes here
    </script>
}

<div>
    poo bar poo
</div>

<div>
  @Html.Partial("_myPartial")
</div>

Necesito inyectar contenido dentro de la Scriptssección desde _myPartialuna vista parcial.

¿Cómo puedo hacer esto?

tugberk avatar Sep 26 '11 21:09 tugberk
Aceptado

Las secciones no funcionan en vistas parciales y eso es por diseño. Puede utilizar algunos ayudantes personalizados para lograr un comportamiento similar, pero, sinceramente, es responsabilidad de la vista incluir los scripts necesarios, no responsabilidad parcial. Recomendaría usar la sección @scripts de la vista principal para hacer eso y no tener que los parciales se preocupen por los scripts.

Darin Dimitrov avatar Sep 26 '2011 14:09 Darin Dimitrov

Esta es una pregunta bastante popular, así que publicaré mi solución.

Tuve el mismo problema y aunque no es ideal, creo que funciona bastante bien y no hace que el parcial dependa de la vista.

Mi escenario era que se podía acceder a una acción por sí misma pero que también se podía incrustar en una vista: un mapa de Google.

En mi _layouttengo:

@RenderSection("body_scripts", false)

En mi indexopinión tengo:

@Html.Partial("Clients")
@section body_scripts
{
    @Html.Partial("Clients_Scripts")
}

En mi clientsopinión tengo (todo el mapa y asoc. html):

@section body_scripts
{
    @Html.Partial("Clients_Scripts")
}

Mi Clients_Scriptsvista contiene el javascript que se mostrará en la página.

De esta manera, mi secuencia de comandos está aislada y se puede representar en la página donde sea necesario, y la body_scriptsetiqueta solo se representa en la primera aparición que el motor de vista de afeitar la encuentra.

Eso me permite tener todo separado: es una solución que funciona bastante bien para mí, otros pueden tener problemas con ella, pero soluciona el agujero "por diseño".

dan richardson avatar Apr 12 '2013 12:04 dan richardson