В веб-формах платформа может автоматически включать Javascript (один раз), когда на странице используются определенные серверные элементы управления; ASP.Net MVC не имеет такой возможности. Похоже, это то, что вам не хватает.
Способ сделать это на клиенте. Посмотрите на RequireJS http://requirejs.org/. Это клиентская библиотека для управления зависимостями Javascript. Это делает то, что сделали Web Forms, но лучше, и делает больше. Ваш основной макет будет иметь такой скрипт-тег:
<script src="/Scripts/require.js" type="text/javascript" data-main="/Scripts/main"></script>
Это может быть тег only *1009*, который вы включаете на каждой странице. Все остальное может быть загружено динамически только по требованию RequireJS. Это правда, что вы загружаете это на каждой странице, но оно меньше, чем jQuery, и оно занимает свое место, потому что так много делает для вас.
Используя ваш пример, допустим, у вас есть эта разметка:
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")
и он рендерит HTML и требует сценариев jQuery. Вы бы сделали это:
// HTML for list box here
<script type="text/javascript>
require(['jquery'], function($) {
// Do your jQuery coding here:
$("myList").doSomething().whatever();
});
</script>
Функция require
загрузит jQuery, если он не был уже загружен, и затем выполнит ваш код. Это правда, что ваш фрагмент jQuery повторяется один раз при использовании помощника HTML, но это не имеет большого значения; этот код должен быть коротким.
RequireJS эффективно управляет зависимостями; у вас может быть модуль A и модуль B, который зависит от A, и модуль C, который зависит от B. Когда ваш клиентский код запрашивает модуль C, A и B будут загружены вместе с C, и в правильном порядке, и только один раз. каждый. Кроме того, за исключением начальной загрузки require.js, скрипты загружаются асинхронно, поэтому рендеринг вашей страницы не задерживается загрузкой скрипта.
Когда пришло время развернуть ваш сайт на веб-сервере, есть инструмент, который изучит зависимости между файлами Javascript и объединит их в один или небольшое количество файлов, а затем сведет их к минимуму. Ни одна из вашей разметки не должна измениться вообще. В процессе разработки вы можете работать с множеством небольших модульных файлов Javascript для простой отладки, а при развертывании они объединяются и минимизируются для повышения эффективности.
Это намного лучше, чем то, что делал фреймворк веб-форм, и полностью на стороне клиента, что, на мой взгляд, и относится к этому.