使用Page.ClientScript.RegisterClientScriptBlock
RegisterClientScriptBlock方法可以把一个JavaScript函数放在页面的顶部。这说明,该脚本用于启动浏览器中的页面。它的用法如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
< 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页面上。运行该页面时,可以查看页面的源代码,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
< 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元素,按照期望的那样执行。