共用方式為


動態指派指令碼參考

更新:2007 年 11 月

大多數案例中,在 ASP.NET 頁面加入指令碼檔案時,最簡單的方式就是加到標記裡,如下例所示:

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

但您也可以動態加入指令碼參考。這種做法能讓網頁開發人員更能掌握指令碼的加入方法。例如,網頁開發人員可以動態加入指令碼,如此可避免在非必要時載入大型指令碼庫,進而節省記憶體資源。或者,他們也可以針對各使用者類型,載入不同指令碼版本。控制項開發人員可以在建置指令碼控制項或擴充項控制項時,動態加入指令碼,好讓裝載這些控制項的網頁動態取用指令碼資源。

本主題描述一個簡單的網頁開發人員案例。有關如何把指令碼參考加入至自訂控制項,請參考建立擴充項控制項讓用戶端行為與 Web 伺服器控制項產生關聯

指令碼參考可以指定指令碼檔案,也可以指定內嵌在組件中做為資源的指令碼。偵錯版及零售版內也可以有指令碼。下列程序示範如何在各種情況下,把指令碼參考指派給頁面。

注意事項:

所有以 ScriptManager 控制項來註冊的指令碼檔案都必須呼叫 notifyScriptLoaded 方法,來通知應用程式,指令碼已載入完成。在大部分情況下,組件型指令碼不應該呼叫此方法。如需詳細資訊,請參閱 Sys.Application.notifyScriptLoaded 方法

動態將指令碼參考加入至網頁

  1. 如果不知道網頁上 <asp:ScriptManager> 項目的 ID,請呼叫 ScriptManager 控制項的 ScriptManagerGetCurrent() 方法,以取得控制項目前的實例。測試 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. 指派檔案型指令碼時,如果 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);
    

請參閱

概念

建立擴充項控制項讓用戶端行為與 Web 伺服器控制項產生關聯

將用戶端功能加入至 Web 伺服器控制項

參考

ScriptReference

ScriptManager

ScriptMode