다음을 통해 공유


동적으로 스크립트 참조 할당

업데이트: 2007년 11월

대부분의 시나리오에서 스크립트 파일을 ASP.NET 페이지에 추가하는 가장 쉬운 방법은 다음 예제에서와 같이 태그를 사용하는 것입니다.

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

그러나 동적으로 스크립트 참조를 추가할 수도 있습니다. 페이지 개발자는 이를 통해 스크립트를 추가하는 방법을 보다 세부적으로 제어할 수 있습니다. 예를 들어 개발자는 필요한 경우에만 대규모 스크립트 라이브러리를 로드하여 메모리 리소스를 절약할 수 있도록 스크립트를 동적으로 추가할 수 있습니다. 또는 사용자 유형에 따라 서로 다른 스크립트 버전을 로드할 수 있습니다. 컨트롤 개발자는 컨트롤을 호스팅하는 페이지에서 스크립트 리소스를 자동으로 사용할 수 있도록 스크립트 컨트롤 또는 Extender 컨트롤을 만들 경우 스크립트를 동적으로 추가합니다.

이 항목에서는 간단한 페이지 개발자 시나리오를 설명합니다. 사용자 지정 컨트롤에 스크립트 참조를 추가하는 방법에 대한 자세한 내용은 클라이언트 동작을 웹 서버 컨트롤에 연결하는 Extender 컨트롤 만들기를 참조하십시오.

스크립트 참조는 어셈블리에 리소스로 포함된 스크립트 또는 스크립트 파일을 지정할 수 있습니다. 스크립트는 디버그 및 정식 버전에 사용할 수 있습니다. 다음 절차에서는 이러한 각각의 상황에서 스크립트 참조를 페이지에 할당하는 방법을 보여 줍니다.

참고:

ScriptManager 컨트롤을 사용하여 등록할 모든 스크립트 파일은 notifyScriptLoaded 메서드를 호출하여 스크립트 로드가 완료되었음을 응용 프로그램에 알립니다. 어셈블리 기반 스크립트에서는 대부분의 경우 이 메서드를 호출하지 않습니다. 자세한 내용은 Sys.Application.notifyScriptLoaded 메서드를 참조하십시오.

페이지에 스크립트 참조를 동적으로 추가하려면

  1. 페이지의 <asp:ScriptManager> 요소 ID를 모르는 경우 ScriptManager 컨트롤의 ScriptManagerGetCurrent() 메서드를 호출하여 컨트롤의 현재 인스턴스를 가져옵니다. 페이지에 ScriptManager 컨트롤이 없는 경우 null을 테스트합니다. 페이지에 <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. 파일 기반 스크립트의 경우 ScriptManager 컨트롤의 ScriptPath 속성이 스크립트 파일의 올바른 위치로 설정되어 있으면 ScriptReference 인스턴스의 Name 속성을 스크립트 파일 이름으로 설정합니다. 그렇지 않은 경우에는 ScriptReference 개체의 Path 속성을 추가할 스크립트 파일의 절대, 상대 또는 응용 프로그램 상대 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. 스크립트가 어셈블리의 일부인 경우에는 ScriptReference 인스턴스의 NameAssembly 속성을 설정합니다.

    SRef.Name = "Script.js"
    SRef.Assembly = "ScriptAssembly"
    
    SRef.Name = "Script.js";
    SRef.Assembly = "ScriptAssembly";
    
  5. 디버그 또는 릴리스 버전의 스크립트를 실행할지 여부를 지정합니다. 페이지의 모든 스크립트에 대해 이 모드를 설정하려면 ScriptManager 컨트롤의 ScriptMode 속성을 설정합니다. 각각의 스크립트에 대해 디버그 모드를 설정하려면 ScriptReference 개체의 ScriptMode 속성을 설정합니다.

    다음 예제에서는 두 옵션에 대해 설명합니다.

    ' 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.
    
    참고:

    ScriptReference 개체의 Path 속성을 설정하지 않으면 ScriptManager 컨트롤의 ScriptMode 속성이 기본적으로 Release로 설정됩니다. ScriptReference 개체의 Path 속성을 설정하면 ScriptManager 컨트롤은 해당 ScriptMode 속성이 특정 모드로 설정되지 않는 한 디버그 스크립트와 릴리스 스크립트 모두를 검사합니다.

  6. ScriptReference 개체를 ScriptManager 컨트롤의 Scripts 컬렉션에 추가합니다.

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

참고 항목

개념

클라이언트 동작을 웹 서버 컨트롤에 연결하는 Extender 컨트롤 만들기

웹 서버 컨트롤에 클라이언트 기능 추가

참조

ScriptReference

ScriptManager

ScriptMode