我们有一个以前使用WebForms的相当复杂的应用程序。我们正在使用MVC从头开始重写它的一些部分。我们的应用程序由许多小部件组成,它们共同组成应用程序的功能。ASP.NET MVC从多个控制器汇总CSS/JS
在WebForms中,我们使用了UserControls。每个UserControl将通过存储在HttpContext.Current.Items中的集合注册其CSS和JavaScript。这个集合将被合并为一个单一的请求。通常这会发生在Page_Load事件中,并且包含页面将呈现一个脚本标记,该标记将包含该页面所需的所有JavaScript和CSS。
我们一直在努力在MVC中做同样的事情。我们使用主页中的许多视图来模仿小部件。每个小部件都有自己的控制器,所以功能可以充分隔离。主页面使用MVC未来的RenderAction在页面上构建小部件。最初我们对CSS/JS文件使用相同的注册方法。每个控制器将在一个Action中注册它所需的文件。这些文件将包含在HttpContext.Current.Items集合中,并将呈现给页面。为了实现这一点,我编写了一个HtmlHelper扩展来将链接/脚本呈现给页面。它看起来像这样:
<%= Html.GetRegisteredCssFiles() %>
问题是,MVC使用更自上而下的方法。此调用是在页面的标记中进行的,但我们后面的RenderAction调用发生在下面。在RenderAction被调用并且所需文件在HttpContext.Current.Items中注册时,上面的代码已经执行。所以,集合在适当的时候不会被修改。
有没有人有任何想法,我们应该如何构建?我正在寻找包含MVC最佳实践的答案。
最后,是否有任何css/js聚合器的dnn?就像drupal(PHP)中的一样? – 2011-10-09 13:08:35