Поделиться через


Динамическое присваивание ссылок на сценарии

Обновлен: Ноябрь 2007

В большинстве случаев наиболее простым способом добавления файла сценария к странице ASP.NET является использование разметки, как показано в следующем примере:

<asp:ScriptManager ID="SMgr" runat="server">
  <Scripts>
    <asp:ScriptReference Path="./Script.js" />
  </Scripts>
</asp:ScriptManager> 

Тем не менее, ссылки на сценарии также могут добавляться динамически. Разработчики страниц могут использовать эту возможность для повышения степени контроля над процессом добавления сценариев. Например, они могут добавлять сценарии динамически для экономии ресурсов памяти, избегая загрузки большой библиотеки сценариев, если в этом нет необходимости. Также можно загружать разные версии сценариев для разных типов пользователей. При разработке сценарных элементов управления или элементов управления расширения разработчики элементов управления добавляют сценарии динамически, чтобы страница, на которой размещен элемент управления, автоматически получала доступ к сценарным ресурсам.

В этом разделе рассматривается простой случай разработки страницы. Дополнительные сведения о добавлении ссылок на сценарии в пользовательских элементах управления см. в разделе Создание управляющего элемента-расширителя для связи клиентского расширения функциональности с серверным веб-элементом управления.

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

Bb398991.alert_note(ru-ru,VS.90).gifПримечание.

Все файлы сценариев, регистрируемые в элементе управления ScriptManager, должны вызывать метод notifyScriptLoaded, чтобы сообщить приложению об окончании загрузки сценария. В большинстве случаев сценариям, размещенным в сборках, не требуется вызывать данный метод. Дополнительные сведения см. в разделе Метод Sys.Application.notifyScriptLoaded.

Динамическое добавление ссылки на сценарий в странице

  1. Если идентификатор элемента <asp:ScriptManager> на странице неизвестен, для получения текущего экземпляра элемента управления следует вызвать метод ScriptManagerGetCurrent() элемента управления ScriptManager. Выполните проверку на равенство null, чтобы предусмотреть отсутствие элемента управления ScriptManager на странице. Если элемент <asp:ScriptManager> заведомо находится на странице и значение его свойства ID известно, этот шаг можно пропустить.

    В следующем примере показан способ проверки наличия элемента управления ScriptManager на странице с последующим получением текущего экземпляра или созданием нового.

    ' If there is a ScriptManager on the page, use it.
    ' If not, throw an exception.
    Dim SMgr As ScriptManager
    If ScriptManager.GetCurrent(Page) Is Nothing Then
        Throw New Exception("ScriptManager not found.")
    Else : SMgr = ScriptManager.GetCurrent(Page)
    End If
    
    // If there is a ScriptManager on the page, use it.
    // If not, throw an exception.
    ScriptManager Smgr = ScriptManager.GetCurrent(Page);
    if (Smgr == null) throw new Exception("ScriptManager not found.");
    
  2. Создайте объект ScriptReference.

    Dim SRef As ScriptReference
    SRef = New ScriptReference()
    
    ScriptReference SRef = new ScriptReference();
    
  3. Если в случае использования файловых сценариев известно, что свойство ScriptPath элемента управления ScriptManager содержит правильный путь к файлу сценария, задайте в качестве значения свойства Name экземпляра ScriptReference имя файла сценария. В противном случае задайте в качестве значения свойства Path объекта ScriptReference абсолютный, относительный или относительный для приложения URL-адрес добавляемого файла сценария.

    ' If you know that Smgr.ScriptPath is correct...
    SRef.Name = "Script.js"
    
    ' Or, to specify an app-relative path...
    SRef.Path = "~/Scripts/Script.js"
    
    // If you know that Smgr.ScriptPath is correct...
    SRef.Name = "Script.js";
    
    // Or, to specify an app-relative path...
    SRef.Path = "~/Scripts/Script.js";
    
  4. Если сценарий является частью сборки, задайте значения свойств Name и Assembly экземпляра ScriptReference.

    SRef.Name = "Script.js"
    SRef.Assembly = "ScriptAssembly"
    
    SRef.Name = "Script.js";
    SRef.Assembly = "ScriptAssembly";
    
  5. Укажите, какая версия сценария должна выполняться: отладочная или конечная. Чтобы установить соответствующий режим для всех сценариев на странице, задайте значение свойства ScriptMode элемента управления ScriptManager. Для установки режима отладки для отдельного сценария задайте свойство ScriptMode объекта ScriptReference.

    В следующем примере показаны обе возможности.

    ' To set ScriptMode for all scripts on the page...
    SMgr.ScriptMode = ScriptMode.Release
    
    'Or, set ScriptMode for just for the one script...
    SRef.ScriptMode = ScriptMode.Debug
    
    'If they conflict, the setting on the ScriptReference wins.
    
    // To set ScriptMode for all scripts on the page...
    Smgr.ScriptMode = ScriptMode.Release;
    
    //Or, to set the ScriptMode just for the one script...
    SRef.ScriptMode = ScriptMode.Debug;
    
    //If they conflict, the setting on the ScriptReference wins.
    
    Bb398991.alert_note(ru-ru,VS.90).gifПримечание.

    Если свойство Path объекта ScriptReference не задано, для свойства ScriptMode элемента управления ScriptManager по умолчанию задается значение Release. Если свойство Path объекта ScriptReference задано, то элемент управления ScriptManager ищет как отладочную, так и конечную версию сценариев, если только в его свойстве ScriptMode не задан конкретный режим.

  6. Добавьте объект ScriptReference в коллекцию Scripts элемента управления ScriptManager.

    SMgr.Scripts.Add(SRef)
    
    Smgr.Scripts.Add(SRef);
    

См. также

Основные понятия

Создание управляющего элемента-расширителя для связи клиентского расширения функциональности с серверным веб-элементом управления

Добавление клиентских возможностей серверным веб-элементам управления

Ссылки

ScriptReference

ScriptManager

ScriptMode