Pergunta

Nós temos uma aplicação bastante complexa, que foi previamente usando WebForms. Estamos no processo de reescrever partes dele a partir do zero usando MVC. Nossa aplicação é composta de uma série de widgets, que juntos compõem a funcionalidade do aplicativo.

Em WebForms, usamos UserControls. Cada UserControl iria registrar seu CSS e JavaScript por meio de uma coleção que foi armazenado em HttpContext.Current.Items. Que a coleta seria, então, fundiram-se para a saída como um único pedido. Normalmente, isso iria ocorrer no evento Page_Load, e a página que contém, então, tornar a uma tag de script que compreende todo o JavaScript e CSS necessários para essa página.

Nós estive lutando com fazer o mesmo no MVC. Nós estamos usando um número de pontos de vista dentro de uma masterpage para imitar os widgets. Cada elemento tem seu próprio controlador, por isso, a funcionalidade pode ser suficientemente segregados. O masterpage acumula os widgets na página usando RenderAction de futuros MVC. Originalmente nós usando o mesmo método de registro para os arquivos CSS / JS. Cada controlador iria registrar seus arquivos necessários em uma ação. Os arquivos seriam então contido na coleção HttpContext.Current.Items, e seria processado para a página. Para facilitar isso, eu escrevi uma extensão HtmlHelper para tornar os links / roteiros para a página. Parece que este:

<%= Html.GetRegisteredCssFiles() %>

O problema é que MVC utiliza uma abordagem para baixo mais alto. Esta chamada é feita no tag da página, mas nossas chamadas subsequentes para RenderAction acontecer a seguir. Pela RenderAction tempo é chamado e os arquivos necessários estão registrados no HttpContext.Current.Items, o código acima já executado. Assim, a coleção não é modificada no momento certo.

Alguém tem alguma idéia de como devemos estar construindo isso? Estou à procura de respostas que incorporam as melhores práticas para MVC.

Foi útil?

Solução

Esta pergunta foi feita muito tempo atrás, então provavelmente você lidou com isso já. Mas para os futuros visitantes, talvez esta solução vai ser úteis: http://marcinbudny.blogspot.com/2010/01/handling -stylesheet referências-in.html

Outras dicas

As ferramentas gratuito Telerik MVC ter um script e um estilo de registrar que pode fazer o que quiser ...

Não sei se isso é uma solução viável para você, mas tente mover essa chamada para a parte inferior de cada página.

Eu sempre incluiu a minha arquivos JavaScript e CSS no HEAD html, então eu não sei se ele iria trabalhar mais para baixo. Minha suposição é que ele vai trabalhar na maioria dos navegadores, mas você pode ter problemas aleatórios em alguns.

A alternativa é ter GetRegisteredFiles () Saída de algum javascript que carrega os arquivos CSS no lugar apropriado (através da manipulação DOM).

O problema com qualquer uma destas soluções é que os arquivos não estão incluídos até o final, o que poderia causar a página para olhar "simples" até que o CSS é baixado.

Como alternativa, o controlador poderia prever que "Widgets" vai ficar carregado e passar os dados para a página principal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top