Page.ClientScript.RegisterStartupScript方法最初可用的选项之一就是使用一个可实现此功能的 .NET 类来注册脚本块。

第一个是 RegisterStartupScript 方法。当您有一个想要在页面加载时启动的 JavaScript 函数时,最好使用该类。

就此列举一例,在 Visual Studio 2005 中创建一个包含两个按钮的 ASP.NET 页面。Button1 和 Button2 分别为这两个按钮的 ID。然后,在 Page_Load 事件内部嵌入以下代码

Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "function AlertHello() { alert('你好,ASP.NET'); }", true);Button1.Attributes["onclick"] = "AlertHello()";Button2.Attributes["onclick"] = "AlertHello()";

RegisterStartupScript 方法的两个可能结构如下:

RegisterStartupScript (type, key, script)

RegisterStartupScript (type, key, script, script tag specification)

在上例中,您指定了类型 Me.GetType()、关键字及包含的脚本,然后是一个值为 True

的布尔值(以便 .NET 自动使用

<script> 标记将脚本嵌入 ASP.NET 页面中)。

在 Page_Load 事件中使用该代码会在浏览器中生成以下 HTML 代码

(为简明起见,已删除了一些 HTML 代码):

<html xmlns="http://www.w3.org/1999/xhtml" >

<head><title>   使用 JavaScript</title></head>

<body><form name="form1" method="post" action="Default.aspx" id="form1">

<div>

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMTM4ODA1MjE5D2QWAgIED2QWBAIBDw9kFgIeB29uY2xpY2s FDEFsZXJ0SGVsbG8oKWQCAw8PZBYCHwAFDEFsZXJ0SGVsbG8oKWRk+DQIaJpw5 A7pyhzP8dxf/JGUSbA=" /></div>

<div><input type="submit" name="Button1" value="Button"  onclick="AlertHello();" id="Button1" />        <input type="submit" name="Button2" value="Button"  onclick="AlertHello();" id="Button2" /></div>

<div><input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK4yNWFBwKM54rGBgK7q7GGCHwBEr6DyGutQ/egvNrB3OYhCwM4" /></div>

<script type="text/javascript"><!--function AlertHello() { alert('你好,ASP.NET'); }// --></script>

</form></body></html>

使用该 ASP.NET 页面时,请注意,在页面的底部、表单 (</form>) 的最后,

嵌入了一个 JavaScript 函数。

应为页面上的所有 JavaScript 指定唯一的关键字,这一点十分重要

(这可通过该方法中要求的 key 参数来实现)。

如果多个 JavaScript 具有相同的关键字名称,则只会在页面中嵌入第一个 JavaScript。

现在,我们通过使用 Page.ClientScript.RegisterClientScriptBlock 方法来创建

一个更好版本的按钮翻转示例。

先前的翻转按钮示例有一个问题,即当终端用户的鼠标置于按钮图像上时,

必须通过单独的请求从服务器检索翻转图像。

较好的翻转按钮情况是,按钮的翻转图像已经下载并存储到了浏览器的高速缓存中,

以便当终端用户将鼠标置于按钮上时,

会立即显示翻转图像。要完成该任务,我们必须构建一个 JavaScript 函数。

以下示例介绍了该 JavaScript 函数以及如何使用

RegisterClientScriptBlock 方法将该函数置于页面中。就本例而言,代码分离只需要

一个 Page_Load 事件及一个针对 ImageButton

服务器控件的按钮单击事件。

<%@ Page Language="C#" %>

<script runat="server">

protected void Page_Load(object sender, EventArgs e)

{ Page.RegisterClientScriptBlock(

"MyScript",

_ "if (document.images) {" + "MyButton = new Image;" +           "MyButtonShaded = new Image;" +           "MyButton.src = 'button1.gif;" + "MyButtonShaded.src = 'button2.gif;" +           "}" +           "else {" +           "MyButton = '';" +           "MyButtonShaded = '';" +           "}

", true);

ImageButton1.Attributes.Add("onmouseover",

"this.src = MyButtonShaded.src;" +  "window.status='是的!请单击此处!';");       ImageButton1.Attributes.Add("onmouseout",

"this.src = MyButton.src;" +          "window.status='';");    }

protected void ImageButton1_Click(object sender,ImageClickEventArgs e)  {     Label1.Text = "回发!";  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">    <title>使用 JavaScript</title></head><body>    <form id="form1" runat="server">

<div>    <p>       <asp:ImageButton id="ImageButton1"         onmouseover="this.src='button2.gif'"         onclick="ImageButton1_Click"         onmouseout="this.src='button1.gif'" runat="server"         ImageUrl="button1.gif"></asp:ImageButton>    </p>    <p>       <asp:Label id="Label1" runat="server" />    </p>    </div>

</form></body></html>

使用此代码时,浏览器的 HTML 输出将如下所示:

<html xmlns="http://www.w3.org/1999/xhtml" >

<head id="Head1"><title>   使用 JavaScript</title></head>

<body>    <form name="form1" method="post" action="Default.aspx" id="form1">

<div><input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"  value="/..." /></div>

<script type="text/javascript"><!--if  (document.images) {MyButton = new Image;MyButtonShaded = new Image;MyButton.src = 'button1.gif';MyButtonShaded.src = 'button2.gif';}else {MyButton= '';MyButtonShaded = '';}// --></script>

<div>        <p>            <input type="image" name="ImageButton1" id="ImageButton1"              onmouseover="this.src = MyButtonShaded.src;window.status=               '是的!请单击此处!';"              onmouseout="this.src = MyButton.src;window.status='';"              src="button1.gif" style="border-width:0px;" /> </p><p><span id="Label1"></span></p>    </div>

<div>   <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION"     value="/wEWAgLhoLy4DwLSwpnTCEKaKJJN3KmLU7TP4vwT5VSKMT+M" /></div>

</form></body></html>

对于该输出,请注意:通过使用 RegisterClientScriptBlock,JavaScript

函数紧跟在 HTML 代码中开启元素 <form> 的后面。除了使用

RegisterClientScriptBlock 方法添加了 JavaScript 函数外,

我们还添加了一些额外的 JavaScript(只是为了增添点乐趣),

以便在终端用户将鼠标置于按钮上时文本会显示在浏览器的状态栏中。如图 3 所示。

Page.ClientScript.RegisterStartupScript 与

Page.ClientScript.RegisterClientScriptBlock 之间的区别

我们已为您介绍了两种不同的可用来将 JavaScript 函数嵌入 ASP.NET 页面的方法,

那么,二者之间有何不同呢?主要区别在于,RegisterStartupScript

方法是将 JavaScript 嵌入到 ASP.NET 页面的底部,恰好位于关闭元素 </form>

的前面。RegisterClientScriptBlock 方法是将 JavaScript 嵌入到

页面中开启元素 <form> 的紧后面。那么,这有何不同呢?正如我们将要看到的,

这有很大的不同。

就此列举一例,以下是在页面加载到浏览器时,将焦点置于该页面上的一个文本框中的方法 -

使用利用了 RegisterStartupScript 方法的 Visual Basic:

Page.ClientScript.RegisterStartupScript(Me.GetType(), "Testing", _   "document.forms[0]['TextBox1'].focus();", True)

由于在浏览器运行到页面底部并执行此小段 JavaScript 时,就已生成了页面上的文本框,

并已将其放到了页面中,因此,此方法运行正常。但是,

如果不按照上述方法,而编写如下代码(使用 RegisterClientScriptBlock 方法):

Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Testing", _  "document.forms[0]['TextBox1'].focus();", True)

文本框控件将不会获得焦点,且会在页面上生成一个 JavaScript 错误(如图 4 所示)。

图 4. 执行 JavaScript 时出错

出错的原因在于,浏览器将先遇到 JavaScript,而后文本框才会出现在页面中。

因此,JavaScript 将无法找到 TextBox1

Page.ClientScript.RegisterStartupScript的更多相关文章

  1. ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 区别

    ScriptManager.RegisterStartupScript方法 如果页面中不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStartu ...

  2. Page.ClientScript.RegisterStartupScript不执行问题

    c#后台使用Page.ClientScript.RegisterStartupScript在前台注册一段脚本提示,发现没有效果,寻寻觅觅,终于从度娘处找到了原因: 该页面多次使用到了Page.Clie ...

  3. asp.net中Page.ClientScript.RegisterStartupScript用法小结(转)

    //ASP.NET后台页面跳转 Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<scri ...

  4. Page.ClientScript.RegisterStartupScript函数的使用

    Page.ClientScript.RegisterStartupScript(type,key,script,addScriptTags);type要注册的启动脚本的类型.key要注册的启动脚本的键 ...

  5. Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptBlock 之间的区别

    Page.ClientScript.RegisterClientScriptBlock 在页面紧跟<form>之后,整个页面未完全加载完成. Page.ClientScript.Regis ...

  6. Page.ClientScript.RegisterStartupScript用法小结

    使用类型.键.脚本文本和指示是否添加脚本标记的布尔值向 Page 对象注册启动脚本. 参数 type 要注册的启动脚本的类型. key 要注册的启动脚本的键. script 要注册的启动脚本文本. a ...

  7. (转)ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 方法

    ScriptManager.RegisterStartupScript方法 如果页面中不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStartu ...

  8. ScriptManager.RegisterStartupScript()方法和Page.ClientScript.RegisterStartupScript() 方法详解

    ScriptManager.RegisterStartupScript()方法 如果页面中不用Ajax,cs中运行某段js代码方式可以是: Page.ClientScript.RegisterStar ...

  9. asp.net中Page.ClientScript.RegisterStartupScript用法小结

    ClientScript.RegisterStartupScript(Page.GetType(), "Show", "alert('" + l_strConf ...

随机推荐

  1. Array--Good parts

    js数组没有上届 --如果你用大于或等于当前length的数字作为下标来存储一个元素,那么length会被增大以容纳新元素,不会发生数组越界. 数组也是对象 --可以添加属性.a["name ...

  2. MyEclipse使用总结——使用MyEclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

  3. PHP网址

    15个魔术方法的总结: http://blog.csdn.net/bossdarcy/article/details/6210794 PHP代码重构:http://blog.csdn.net/tony ...

  4. codeforces 377A. Puzzles 水题

    A. Puzzles Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/33 ...

  5. iOS 设计模式之抽象工厂

    设计模式是程序提升的必备知识,这里说下iOS怎样实现抽象工厂设计模式.本文是看过oc编程之道这本的抽象工厂这章后写出的,假设不明确原理能够看看那本书. TestView.h首先创建一个视图 // // ...

  6. 使用AmplifyJS和JQuery编写更好更优雅的javascript事件处理代码

    事件(或消息)是一种经常使用的软件设计模式.可以减少消息处理者和消息公布者的之间的耦合,比方J2EE里面的JMS规范.设计模式中的观察者模式(也叫公布/订阅模式).这对于javascript代码相同适 ...

  7. MySql5.5忘记root密码的解决方法

    试了很多方法,下面这种方法是确保可以成功的,呵呵.转载自:http://hi.baidu.com/bjben/item/722bb50b27baf1dcdde5b097. 申明:本文章应该属于转载,但 ...

  8. LOCK TABLES

    http://blog.csdn.net/zyz511919766/article/details/16342003 http://blog.csdn.net/zyz511919766/article ...

  9. Linux Shell远程执行命令(命令行与脚本方式)

    需求:经常需要在一台服务器远程到其他节点的服务器上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了.介绍两种shell命令远程执行的方法. 方式一: s ...

  10. java中的包有那些 ???

    java.util工具包java.sql数据库包java.io输入输出流包java.net网络包java.lang基础包这些是基本的包,还有一些其他的例如集合,反射等的工具包,你可以去查一下java ...