ASP.NET Путь CompositeScript приводит к 404

#javascript #asp.net

#javascript #asp.net

Вопрос:

Если я использую функцию CompositeScript из ASP.NET Элементы управления ScriptManager / ScriptManagerProxy, я не могу заставить атрибут Path работать:

Мой код

 <asp:ScriptManagerProxy ID="scriptProxy2" runat="server">
  <CompositeScript Path="~/Includes/Javascript/Combined.js">
    <Scripts>
      <asp:ScriptReference Path="~/Includes/Javascript/MyFile1.js" />
      <asp:ScriptReference Path="~/Includes/Javascript/MyFile2.js" />
    </Scripts>
  </CompositeScript>
</asp:ScriptManagerProxy>
  

Моя страница получает правильный тег script в нем:

 <script src="../Includes/Javascript/Combined.debug.js" type="text/javascript"></script>
  

Но, конечно, этот файл не существует, и поэтому браузер получает 404.

Я что-то упускаю?

Ответ №1:

Указали ли вы исходные сценарии для объединения с помощью ScriptReference тега — смотрите документацию.

РЕДАКТИРОВАТЬ: После использования reflector я обнаружил, что если вы используете атрибут specify Path , объединение скриптов не происходит — он просто отправляет ссылку на скрипт по указанному пути (изменение в соответствии с режимом выпуска / отладки и культурой (если включена локализация)). Погуглив, обнаружил, что предполагаемое использование свойства path предназначено для обхода ограничения URL-адреса в 1024 символа. Из этой документации MSDN:

Количество ссылок на скрипт, которые может содержать экземпляр CompositeScriptReference, ограничено размером результирующего URL. URL не может быть длиннее 1024 символов.

Если вам нужно обойти это ограничение, у вас есть два варианта. Первый вариант заключается в уменьшении количества объектов ScriptReference, которые содержит составной скрипт. Второй вариант — вручную объединить скрипты в один статический файл. В этом случае вы можете задать свойству Path местоположение статического файла.

Я также наткнулся на эту ссылку, где в разделе комментариев содержится множество информации. В одном из таких комментариев четко указано, что

Вы можете объединить несколько физических файлов скриптов, используя эту функцию, но мы действительно не рекомендуем это, поскольку есть некоторые накладные расходы сервера, связанные с мониторингом файлов. То, что вы описываете, гораздо лучше обрабатывается путем «сборки» ваших скриптов во время компиляции вместо выполнения комбинации во время выполнения. Эта функция действительно предназначена для разработчиков приложений, которые хотят объединить существующие скрипты из различных компонентов, которые они используют в своем приложении.

Итак, в целом, я думаю, что то, как вы собираетесь использовать combine script, не поддерживается и не рекомендуется. Я предлагаю вам использовать объединение скриптов во время сборки — приведенные ниже ресурсы помогут вам достичь того же:

http://encosia.com/2009/05/20/automatically-minify-and-combine-javascript-in-visual-studio/

Посмотрите на функцию затирания в надстройке Chirpy: http://www.weirdlover.com/2010/07/18/chirpy-attains-godlike-abilities-in-version-1-0-0-4/#mash

Комментарии:

1. Да, мне следовало бы с самого начала рассказать более подробно, но теперь я обновил свой пример кода, чтобы показать добавляемые скрипты. И в документации действительно говорится, что я могу присвоить скрипту имя в разделе «Присвоение имени файла составному скрипту»: msdn.microsoft.com/en-us/library/… Но, как я уже сказал, это дает значение 404 при обращении.

2. @slolife, по-видимому, ваше намерение использовать сценарий объединения не поддерживается и не рекомендуется. Смотрите мою правку в ответе.