Pregunta

Tenemos una aplicación bastante compleja que anteriormente usaba WebForms. Estamos en el proceso de reescritura de bits desde cero utilizando MVC. Nuestra aplicación se compone de una serie de widgets, que en conjunto conforman la funcionalidad de la aplicación.

En WebForms, usamos UserControls. Cada UserControl registraría su CSS y JavaScript por medio de una colección que se almacenó en HttpContext.Current.Items. Esa colección se fusionaría para generar una sola solicitud. Por lo general, esto ocurrirá en el evento Page_Load, y la página que contiene generará una etiqueta de secuencia de comandos que comprenderá todo el JavaScript y CSS necesarios para esa página.

Hemos estado luchando para hacer lo mismo en MVC. Estamos utilizando una serie de vistas dentro de una página maestra para imitar los widgets. Cada widget tiene su propio controlador, por lo que la funcionalidad se puede segregar suficientemente. La página maestra crea los widgets en la página utilizando RenderAction de los futuros de MVC. Originalmente usábamos el mismo método de registro para los archivos CSS / JS. Cada controlador registraría sus archivos requeridos en una acción. Los archivos se incluirían en la colección HttpContext.Current.Items y se mostrarían en la página. Para facilitar esto, escribí una extensión HtmlHelper para representar los enlaces / scripts a la página. Se parece a esto:

<%= Html.GetRegisteredCssFiles() %>

El problema es que MVC utiliza un enfoque más descendente. Esta llamada se realiza en la etiqueta de la página, pero nuestras llamadas subsiguientes a RenderAction suceden a continuación. En el momento en que se llama a RenderAction y los archivos necesarios se registran en HttpContext.Current.Items, el código anterior ya se ha ejecutado. Por lo tanto, la colección no se modifica en el momento adecuado.

¿Alguien tiene alguna idea sobre cómo deberíamos construir esto? Estoy buscando respuestas que incorporen las mejores prácticas para MVC.

¿Fue útil?

Solución

Esta pregunta se hizo hace mucho tiempo, por lo que probablemente ya hayas resuelto esto. Pero para futuros visitantes, tal vez esta solución sea útil: http://marcinbudny.blogspot.com/2010/01/handling -stylesheet-references-in.html

Otros consejos

Las herramientas gratuitas de Telerik MVC tienen un script y un registro de estilo que pueden hacer lo que quieras ...

No estoy seguro de si esta es una solución viable para usted, pero intente mover esa llamada al final de cada página.

Siempre he incluido mis archivos javascript y css en el html HEAD, así que no sé si funcionaría más abajo. Supongo que funcionará en la mayoría de los navegadores, pero es posible que tengas problemas aleatorios en algunos.

La alternativa es que GetRegisteredFiles () genere algún javascript que cargue los archivos CSS en el lugar adecuado (a través de la manipulación DOM).

El problema con cualquiera de estas soluciones es que los archivos no se incluyen hasta el final, lo que podría hacer que la página se vea " simple " hasta que se descargue el CSS.

Alternativamente, el controlador podría predecir qué " widgets " se cargará y pasará esos datos a la página maestra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top