您的位置:首页 > 编程语言 > ASP

在 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);}}
以下是这几种方法的说明:

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐