У нас есть довольно сложное приложение, которое ранее использовало WebForms. Мы находимся в процессе перезаписи бит с нуля с помощью MVC. Наше приложение состоит из нескольких виджетов, которые вместе составляют функциональность приложения.ASP.NET MVC Aggregate CSS/JS из нескольких контроллеров
В WebForms мы использовали UserControls. Каждый UserControl зарегистрировал бы свой CSS и JavaScript с помощью коллекции, которая хранилась в HttpContext.Current.Items. Затем эта коллекция будет объединена для вывода в виде одного запроса. Обычно это происходит в событии Page_Load, а содержащая страница будет отображать тег скрипта, который будет содержать все JavaScript и CSS, необходимые для этой страницы.
Мы боролись с тем, чтобы делать то же самое в MVC. Мы используем несколько представлений на главной странице, чтобы имитировать виджеты. Каждый виджет имеет свой собственный контроллер, поэтому функциональность может быть достаточно изолирована. Мастер-страница создает виджеты на странице с использованием RenderAction из фьючерсов MVC. Первоначально мы использовали тот же метод регистрации для файлов CSS/JS. Каждый контроллер регистрирует свои необходимые файлы в Action. Затем файлы будут содержаться в коллекции HttpContext.Current.Items и будут отображены на странице. Чтобы облегчить это, я написал расширение HtmlHelper, чтобы отобразить ссылки/скрипты на странице. Это выглядит так:
<%= Html.GetRegisteredCssFiles() %>
Проблема заключается в том, что MVC использует более подход сверху вниз. Этот вызов выполняется в теге страницы, но последующие вызовы RenderAction происходят ниже. К тому времени, когда вызывается RenderAction и необходимые файлы регистрируются в HttpContext.Current.Items, код выше уже выполнен. Таким образом, коллекция не изменяется в нужное время.
Есть ли у кого-нибудь идеи о том, как мы должны это строить? Я ищу ответы, которые включают лучшие практики для MVC.
наконец-то, есть ли css/js-агрегатор для dnn? как в drupal (PHP)? –