動態指派指令碼參考
更新:2007 年 11 月
大多數案例中,在 ASP.NET 頁面加入指令碼檔案時,最簡單的方式就是加到標記裡,如下例所示:
<asp:ScriptManager ID="SMgr" >
<Scripts>
<asp:ScriptReference Path="./Script.js" />
</Scripts>
</asp:ScriptManager>
但您也可以動態加入指令碼參考。這種做法能讓網頁開發人員更能掌握指令碼的加入方法。例如,網頁開發人員可以動態加入指令碼,如此可避免在非必要時載入大型指令碼庫,進而節省記憶體資源。或者,他們也可以針對各使用者類型,載入不同指令碼版本。控制項開發人員可以在建置指令碼控制項或擴充項控制項時,動態加入指令碼,好讓裝載這些控制項的網頁動態取用指令碼資源。
本主題描述一個簡單的網頁開發人員案例。有關如何把指令碼參考加入至自訂控制項,請參考建立擴充項控制項讓用戶端行為與 Web 伺服器控制項產生關聯。
指令碼參考可以指定指令碼檔案,也可以指定內嵌在組件中做為資源的指令碼。偵錯版及零售版內也可以有指令碼。下列程序示範如何在各種情況下,把指令碼參考指派給頁面。
注意事項: |
---|
所有以 ScriptManager 控制項來註冊的指令碼檔案都必須呼叫 notifyScriptLoaded 方法,來通知應用程式,指令碼已載入完成。在大部分情況下,組件型指令碼不應該呼叫此方法。如需詳細資訊,請參閱 Sys.Application.notifyScriptLoaded 方法。 |
動態將指令碼參考加入至網頁
如果不知道網頁上 <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.");
建立 ScriptReference 物件。
Dim SRef As ScriptReference SRef = New ScriptReference()
ScriptReference SRef = new ScriptReference();
指派檔案型指令碼時,如果 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";
指令碼如果是組件的一部分,請設定 ScriptReference 實例的 Name 及 Assembly 屬性。
SRef.Name = "Script.js" SRef.Assembly = "ScriptAssembly"
SRef.Name = "Script.js"; SRef.Assembly = "ScriptAssembly";
指定是要執行偵錯,還是要發行指令碼版本。如果要把網頁上的所有指令碼都設定成此模式,請設定 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 屬性設定成特定模式,否則此控制項會尋找偵錯及發行指令碼。
將 ScriptReference 物件加入至 ScriptManager 控制項的 Scripts 集合。
SMgr.Scripts.Add(SRef)
Smgr.Scripts.Add(SRef);
請參閱
概念
建立擴充項控制項讓用戶端行為與 Web 伺服器控制項產生關聯