在 Web 应用程序中定义用于管理客户端脚本的方法。
程序集: System.Web (在 System.Web.dll 中)
ClientScriptManager 类型公开以下成员。
ClientScriptManager 类用于管理客户端脚本并将它们添加到 Web 应用程序中。 可以从 Page 对象的ClientScript 属性获取对 ClientScriptManager 类的引用。
通过在网页的 HTML 标记中包含脚本,可以声明方式向网页添加客户端脚本。 然而,有些情况下需要动态添加客户端脚本。 若要动态添加脚本,根据您想添加脚本的时间及方式,使用 RegisterClientScriptBlock 方法、RegisterClientScriptInclude 方法、RegisterStartupScript 方法或 RegisterOnSubmitStatement 方法。 有关更多信息,请参见 如何:向 ASP.NET 网页动态添加客户端脚本。
ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本。 具有相同的键和类型的脚本被视为重复脚本。使用脚本类型有助于避免混淆可能用在页中的来自不同用户控件的相似脚本。
在期望不执行回发而从客户端运行服务器代码的情况下,可以使用 ClientScriptManager 类来调用客户端回调。 这称为对服务器执行带外回调。 在客户端回调中,客户端脚本函数向 ASP.NET 网页发送异步请求。 网页修改其正常生命周期来处理回调。 使用 GetCallbackEventReference 方法获取一个对客户端函数的引用,当调用该函数时,它将启动一个对服务器端事件的客户端回调。 有关更多信息,请参见 在 ASP.NET 网页中不经过回发而以编程方式实现客户端回调。
注意 |
---|
脚本回调不能在不支持文档对象模型 (DOM) 的较早浏览器中使用,并且它们要求客户端启用 ECMAScript。 若要检查浏览器是否支持回调,请使用 SupportsCallback 属性,该属性可以通过 ASP.NET Request 内部对象的Browser 属性访问。 |
使用 GetPostBackEventReference 方法和 GetPostBackClientHyperlink 方法定义客户端回发事件。 这些方法启用客户端脚本函数,在调用这些函数时,它们将促使服务器向该页回发。 客户端回发与客户端回调的区别在于网页处理客户端回发事件要用完一个正常的生命周期。
注意 |
---|
如果您在使用 Button 控件且 UseSubmitBehavior 属性设置为 false,则可以使用GetPostBackEventReference 方法返回 Button 控件的客户端回发事件。 |
可以使用 Button 控件、ImageButton 控件和 LinkButton 控件的 OnClientClick 属性来运行客户端脚本。
下面的代码示例演示如何使用 ClientScriptManager 类的 RegisterClientScriptBlock 方法。 该页中定义了两个客户端脚本:PopupScript(在加载页时显示警报消息)和 ButtonClickScript(定义 HTML 按钮的 onClick 事件的客户端处理程序)。
<%@ Page Language="C#"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> public void Page_Load(Object sender, EventArgs e) { // Define the name and type of the client scripts on the page. String csname1 = "PopupScript"; String csname2 = "ButtonClickScript"; Type cstype = this.GetType(); // Get a ClientScriptManager reference from the Page class. ClientScriptManager cs = Page.ClientScript; // Check to see if the startup script is already registered. if (!cs.IsStartupScriptRegistered(cstype, csname1)) { String cstext1 = "alert('Hello World');"; cs.RegisterStartupScript(cstype, csname1, cstext1, true); } // Check to see if the client script is already registered. if (!cs.IsClientScriptBlockRegistered(cstype, csname2)) { StringBuilder cstext2 = new StringBuilder(); cstext2.Append("<script type=\"text/javascript\"> function DoClick() {"); cstext2.Append("Form1.Message.value='Text from client script.'} </"); cstext2.Append("script>"); cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(), false); } } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>ClientScriptManager Example</title> </head> <body> <form id="Form1" runat="server"> <input type="text" id="Message" /> <input type="button" value="ClickMe" οnclick="DoClick()" /> </form> </body> </html>