动态分配脚本引用
更新:2007 年 11 月
大多数情况下,将脚本文件添加到 ASP.NET 页中的最简单的方法是添加到标记中,如下面的示例所示:
<asp:ScriptManager ID="SMgr" runat="server">
<Scripts>
<asp:ScriptReference Path="./Script.js" />
</Scripts>
</asp:ScriptManager>
但也可以动态添加脚本引用。网页开发人员可以通过此方式在更大程度上控制如何添加脚本。例如,他们可以动态添加脚本以帮助保留内存资源,如在不需要时不加载大型脚本库。他们也可以为不同类型的用户加载不同版本的脚本。控件开发人员在创建脚本控件或扩展程序控件时可以动态添加脚本,以便使脚本资源可自动用于该控件所在的页。
本主题介绍了一个简单的网页开发人员方案。有关在自定义控件中添加脚本引用的信息,请参见创建扩展程序控件以将客户端行为与 Web 服务器控件关联。
脚本引用可以指定脚本文件或在程序集中作为资源嵌入的脚本。脚本可以存在于调试版本和零售版本中。下面的过程演示在每种情况下如何为页指定脚本引用。
说明: |
---|
要向 ScriptManager 控件注册的所有脚本文件都必须调用 notifyScriptLoaded 方法,以通知应用程序脚本已完成加载。基于程序集的脚本在大多数情况下不应调用此方法。有关更多信息,请参见 Sys.Application.notifyScriptLoaded 方法。 |
将脚本引用动态添加到页
如果您不知道页面上 <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.");
创建 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);