在 ASP.NET 页面中包括客户端脚本的方法
2011-01-22 11:15
330 查看
/article/5533961.html主要包括以下三种方法:以静态方式将客户端脚本包括在含有代码或使用 include 特性引用 JavaScript (.js) 文件的 script 块中。 使用此选项,可在脚本块或 JavaScript 文件中插入无需动态创建,亦不需要 Microsoft AJAX Librarc y 提供的附加 AJAX 功能的客户端脚本。使用 ClientScriptManager 类以动态方式创建客户端脚本并添加至 ASP.NET 网页。 如果要创建的脚本依赖仅在运行时才可用的信息,请使用此选项。如果您计划利用 ASP.NET 的 AJAX 功能,则可以使用 ScriptManager 服务器控件管理客户端脚本文件。 ScriptManager 服务器控件还可以确保,浏览器在运行您的脚本之前已加载 Microsoft AJAX Library。ClientScriptManagerClientScriptManager 类用于管理客户端脚本并将它们添加到 Web 应用程序中。 可以从 Page 对象的 ClientScript 属性获取对 ClientScriptManager 类的引用。通过在网页的 HTML 标记中包含脚本,可以声明方式向网页添加客户端脚本。 然而,有些情况下需要动态添加客户端脚本。 若要动态添加脚本,根据您想添加脚本的时间及方式,使用 RegisterClientScriptBlock 方法、RegisterClientScriptInclude 方法、RegisterStartupScript 方法或 RegisterOnSubmitStatement 方法
方法 | 说明 |
---|---|
RegisterClientScriptBlock | 向页的顶部添加一个脚本块。 以字符串形式创建脚本,然后将其传递给方法,方法再将脚本添加到页中。 可以使用此方法将任何脚本插入到页中。 请注意,脚本可能在所有元素完成之前呈现到页中;因此,您可能无法从脚本中引用页上的所有元素。 |
RegisterClientScriptInclude | 与 RegisterClientScriptBlock 方法类似,但此方法将添加引用外部 .js 文件的脚本块。 包含文件在任何其他动态添加的脚本之前添加;因此,您可能无法引用页上的某些元素。 |
RegisterStartupScript | 向页中添加一个脚本块,该脚本块在页完成加载后引发页的 onload 事件之前执行。 该脚本通常不创建为事件处理程序或函数;它通常只包含要执行一次的语句。 |
RegisterOnSubmitStatement | 添加响应页的 onsubmit 事件而执行的脚本。 该脚本在提交页之前执行,允许您取消提交。 |
在期望不执行回发而从客户端运行服务器代码的情况下,可以使用 ClientScriptManager 类来调用客户端回调。 这称为对服务器执行带外回调。 在客户端回调中,客户端脚本函数向 ASP.NET 网页发送异步请求。 网页修改其正常生命周期来处理回调。 使用 GetCallbackEventReference 方法获取一个对客户端函数的引用,当调用该函数时,它将启动一个对服务器端事件的客户端回调。
实现客户端回调的 ASP.NET 网页
<%@ Page Language="C#" AutoEventWireup="true"CodeFile="ClientCallback.aspx.cs" Inherits="ClientCallback" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head id="Head1" runat="server"><title>Client Callback Example</title><script type="text/ecmascript">function LookUpStock(){var lb = document.getElementById("ListBox1");var product = lb.options[lb.selectedIndex].text;CallServer(product, "");}function ReceiveServerData(rValue){document.getElementById("ResultsSpan").innerHTML = rValue;}</script></head><body><form id="form1" runat="server"><div><asp:ListBox ID="ListBox1" Runat="server"></asp:ListBox><br /><br /><button type="Button" onclick="LookUpStock()">Look Up Stock</button><br /><br />Items in stock: <span id="ResultsSpan" runat="server"></span><br /></div></form></body></html>
using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;publicpartialclass ClientCallback : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler{protected System.Collections.Specialized.ListDictionary catalog;protected String returnValue;protectedvoid Page_Load(object sender, EventArgs e){String cbReference =Page.ClientScript.GetCallbackEventReference(this,"arg", "ReceiveServerData", "context");String callbackScript;callbackScript = "function CallServer(arg, context)" +"{ " + cbReference + ";}";Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"CallServer", callbackScript, true);catalog = new System.Collections.Specialized.ListDictionary();catalog.Add("monitor", 12);catalog.Add("laptop", 10);catalog.Add("keyboard", 23);catalog.Add("mouse", 17);ListBox1.DataSource = catalog;ListBox1.DataTextField = "key";ListBox1.DataBind();}publicvoid RaiseCallbackEvent(String eventArgument){if (catalog[eventArgument] == null){returnValue = "-1";}else{returnValue = catalog[eventArgument].ToString();}}public String GetCallbackResult(){return returnValue;}}该网页模拟一个数据库查找,以确定一系列产品(监视器、键盘等)的供货数量或库存数量。[/code][/code]
publicvoid 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);}}
以下是这几种方法的说明:
相关文章推荐
- asp.net客户端脚本调用页面方法
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)
- ASP.NET 关于判断是否是客户端“刷新”页面的方法 [转]
- 关于向 ASP.NET 网页动态添加客户端脚本的二个方法的区别
- ASP.NET 关于判断是否是客户端“刷新”页面的方法 [转]
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(4):异步通讯层生成的客户端代理类、使用HTTP GET进行调用
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- ASP.NET防止客户端页面刷新导致多次提交的方法
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- 使用ASP.NET建立并控制客户端脚本的四种方法
- Asp.net 中,在服务端向客户端写脚本的常用方法
- ASP.NET刷新页面的六种方法(转) 包括在跳转的时候使用提示
- 设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(4):异步通讯层生成的客户端代理类、使用HTTP GET进行调用
- [导入]Asp.net中使用客户端脚本的方法
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型
- Asp.net 中,在服务端向客户端写脚本的常用方法
- ASP.NET 页面刷新的实现方法(包括html,js)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(9):服务器端和客户端数据类型的自动转换:DataTable和DataSet