asp.net中注册脚本的两个方法

使用Page.ClientScript.RegisterClientScriptBlock

 

RegisterClientScriptBlock方法可以把一个JavaScript函数放在页面的顶部。这说明,该脚本用于启动浏览器中的页面。它的用法如下所示:

 

代码
<%@ Page Language="VB" %>  
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As_System.EventArgs)
Dim myScript As String 
= "function AlertHello() { alert('Hello_  ASP.NET'); }"
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(),_ 
"MyScript",myScript, True)
End Sub 
</script>  
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"> 
<title>Adding JavaScript</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" Runat="server" Text="Button" OnClientClick="AlertHello()" />
</div>
</form>
</body>
</html>

 

 

 这里把JavaScript函数AlertHello创建为一个字符串myScript。接着使用Page.Client Script.Register ClientScriptBlock方法,将脚本放在页面中。RegisterClientScriptBlock方法的两个结构如下:

RegisterClientScriptBlock(type, key, script)

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

上面的示例指定了类型Me.GetType、键、要包含的脚本,接着是一个设置为True的布尔值,所以.NET会自动用<script>标记把脚本放在ASP.NET页面上。运行该页面时,可以查看页面的源代码,如下所示:

 

代码
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>Adding JavaScript
</title></head>
<body>
<form method="post" action="JavaScriptPage.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE"  value="/wEPDwUKMTY3NzE5MjIyMGRkiyYSRMg+bcXi9DiawYlbxndiTDo=" />
</div>
<script type="text/javascript">
<!--  function AlertHello() { alert('Hello ASP.NET'); }// --> 
</script>
<div>
<input type="submit" name="Button1" value="Button" onclick="AlertHello();" id="Button1" />
</div>
</form>
</body>
</html> 

 

 

从这段代码中可以看出,指定的脚本放在ASP.NET页面的页面代码之前。不仅包含<script>标记,还在脚本的外部添加了相应的注释标记(所以旧浏览器不会崩溃)。

 

使用Page.ClientScript.RegisterStartupScript

RegisterStartupScript方法类似于RegisterClientScriptBlock方法,主要区别是RegisterStartup Script方法把脚本放在ASP.NET页面的底部,而不是顶部。实际上,RegisterStartupScript方法与RegisterClientScriptBlock方法采用相同的结构:

RegisterStartupScript(type, key, script)

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

是什么使脚本在页面的不同地方注册?其实区别很多。如果JavaScript代码处理的是页面上的一个控件,则大多数情况下应使用RegisterStartupScript方法,而不是RegisterClientScript Block方法。例如,使用下面的代码创建一个页面,其中包含一个简单的<asp:TextBox>控件,其默认值是Hello ASP.NET:

 

<asp:TextBox ID="TextBox1" Runat="server">Hello ASP.NET</asp:TextBox> 接着,使用RegisterClientScriptBlock方法把一个脚本放在页面上,以利用TextBox1控件中的值:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)  

  Dim myScript As String = "alert(document.forms[0]['TextBox1'].value);"   

  Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "myKey", _ myScript,True)

End Sub

运行这个页面,会生成JavaScript错误。

 


发生错误是因为JavaScript函数在文本框控件放在屏幕上之前就引发了。因此,JavaScript函数找不到TextBox1,页面就会抛出一个错误。现在试试RegisterStartupScript方法:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

     Dim myScript As String = "alert(document.forms[0]['TextBox1'].value);"

    Page.ClientScript.RegisterStartupScript(Me.GetType(), "myKey", _myScript, True)

End Sub 这个方法把JavaScript函数放在ASP.NET页面的底部,所以JavaScript函数执行时,会找到TextBox1元素,按照期望的那样执行。

   

 

 

 

posted @ 2010-03-24 22:01  Fskjb  阅读(2012)  评论(0编辑  收藏  举报
年年行好运