style - mvc call partial view from javascript
¿Cómo puedo incluir archivos css desde un control parcial MVC? (9)
Estoy usando ASP.NET MVC y tengo un control parcial que necesita un archivo CSS y JS particular incluido. ¿Hay alguna manera de hacer que la página padre represente el script
y las etiquetas de link
en la sección "encabezado" de la página, en lugar de simplemente representarlas en línea en el control parcial?
Para aclarar el control del que quiero incluir los archivos, se representa desde una Vista con Html.RenderPartial
y, por lo tanto, no puedo tener controles de contenido en el servidor. Quiero poder incluir los archivos en la sección del head
html para evitar problemas de validación.
Incluye un marcador de posición en tu plantilla maestra:
<head runat="server>
<asp:ContentPlaceHolder ID="head" runat="server" />
</head>
y en tu control
<asp:Content ID="head" runat="server">
<script src="something.js"></script>
</asp:Content>
Si está dispuesto a romper la conformidad, puede simplemente emitir una definición de estilo con el contenido parcial. Esto tiende a funcionar en los navegadores más recientes.
Dependiendo de la cantidad de CSS / JS que necesite su control, la ruta más segura puede ser simplemente incluir el estilo adicional en sus archivos CSS principales. Guarda un viaje adicional al servidor, y el cliente debe almacenarlo en caché. Sé que esto mata la autosuficiencia (para acuñar una frase) del control, pero puede ser tu mejor opción.
Lo sentimos, no se puede desde un control parcial referirse a "subir" a algo en la página principal (o agregar algo). La única comunicación es "inactiva" desde el elemento primario al parcial al pasar ViewData / Model.
Está describiendo la funcionalidad de una página maestra y una página normal utilizando los titulares de lugar de contenido, pero los controles parciales no funcionan así.
Pero, si no me equivoco, puede agregar físicamente la secuencia de comandos o las etiquetas de enlace a la página primaria real en la que se muestra la página parcial; la página parcial también debe usar el CSS.
La respuesta de Todd funciona bien, siempre que solo tenga una instancia del control y no haya otro código que quiera "inyectar" nada en la etiqueta de la página maestra. Desafortunadamente, rara vez puedes confiar en esto.
Le sugiero que incluya todos los archivos css que necesita en la página maestra. Habrá un pequeño golpe de percusión en la primera visita, pero después de eso, se activará el almacenamiento en caché del navegador. Puede (y debería) dividir sus estilos en múltiples archivos .css para beneficiarse de los agentes HTTP que pueden descargarlos de manera conciente. En cuanto a los archivos .js, sugiero implementar algo cercano al mecanismo de google.load()
, que le permita cargar scripts a pedido.
http://www.codeproject.com/Articles/38542/Include-Stylesheets-and-Scripts-From-A-WebControl-.aspx
Este artículo contiene información sobre la eliminación de HttpContext.Response.Filter que funcionó muy bien para mí.
Soy nuevo en MVC ... Recientemente tuve el desafío. Utilicé MVC View Page en lugar de vista parcial, agregué su propia página maestra (porque tengo un css que se comparte en varias vistas) y agregué css a master. Espero que esta información ayude.
Si tengo requisitos para CSS / Javascript en una vista parcial, simplemente me aseguro de que cualquier página que pueda incluir la vista parcial, ya sea directamente o como contenido recuperado de AJAX, tenga el CSS / Javascript incluido en sus encabezados. Si la página tiene una página maestra, agrego un marcador de posición de contenido en el encabezado de la página maestra y lo rellene en la página secundaria. Para obtener intellisense en la vista parcial, agrego el CSS / Javascript incluye en la vista parcial pero envuelto con un bloque de código if (false)
para que no se incluyan en el tiempo de ejecución.
<% if (false) { %>
<link href=...
<script type=...
<% } %>
Antes de la línea parcial de representación, llame a @import
siguiente manera:
<style type="text/css>
@import url(cssPath.css);
</style>
Espero que esto ayude.
Acabo de encontrar esta opción en Haacked y recordé tu pregunta. Use el marcador de posición de Content
del encabezado en la vista parcial y simplemente agregue el CSS a ese formulario normalmente.