这几天做项目的时候又碰到往前台打脚本,其实以前用过了,今天特意拿出来总结一下两者(RegisterClientScriptBlock/RegisterStartupScript)的区别:
1.Page.RegisterClientScriptBlock方法:
客户端脚本刚好在Page对象的<form runat=”server”>元素的开始标志后发出。
RegisterClientScriptBlock() 方法用于为响应客户端事件而执行的脚本代码。通过此方法发送的脚本块位于 Web 页面的开始处,因为这种方法不要求将脚本块置于所有 HTML 元素之后,即它一般不使用文档内自定义的控件
以下是该方法的一个使用实例:
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< HTML >
< HEAD >
< title > WebForm5 </ title >
< meta name ="GENERATOR" content ="Microsoft Visual Studio .NET 7.1" >
< meta name ="CODE_LANGUAGE" content ="Visual Basic .NET 7.1" >
< meta name ="vs_defaultClientScript" content ="JavaScript" >
< meta name ="vs_targetSchema" content ="http://schemas.microsoft.com/intellisense/ie5" >
</ HEAD >
< body >
< form id ="Form1" method ="post" runat ="server" >
< input type ="button" value ="ClickMe" onclick ="OnClick()" >
< span id ="showMessage2" ></ span >
</ form >
</ body >
</ HTML >
' Form the script to be registered at client side.
Dim scriptString As String
scriptString = " <script language=JavaScript> function OnClick(){ "
scriptString += " showMessage2.innerHTML='<h4>Welcome to Microsoft.NET!</h4>'}< "
scriptString += " / "
scriptString += " script> "
If ( Not IsClientScriptBlockRegistered( " clientScript " )) Then
RegisterClientScriptBlock( " clientScript " , scriptString)
End If
End Sub
运行后生成的源文件:
< HTML >
< HEAD >
< title > WebForm5 </ title >
< meta name ="GENERATOR" content ="Microsoft Visual Studio .NET 7.1" >
< meta name ="CODE_LANGUAGE" content ="Visual Basic .NET 7.1" >
< meta name ="vs_defaultClientScript" content ="JavaScript" >
< meta name ="vs_targetSchema" content ="http://schemas.microsoft.com/intellisense/ie5" >
</ HEAD >
< body >
< form name ="Form1" method ="post" action ="WebForm5.aspx" id ="Form1" >
< input type ="hidden" name ="__VIEWSTATE" value ="dDwtNjU0MzcyMTk1Ozs+xxQ3E05ag4Me8uTAnG3LTO9zgAg=" />
< script language =JavaScript > function OnClick(){showMessage2.innerHTML = ' < h4 > Welcome to Microsoft.NET !</ h4 > '} </ script >
< input type ="button" value ="ClickMe" onclick ="OnClick()" >
< span id ="showMessage2" ></ span >
</ form >
</ body >
</ HTML >
可以很清楚的看到客户端脚本在Page对象的<form>元素的开始标志后发出。
2.Page.RegisterStartupScript在Web窗体的结尾处(在 </form> 标识之前)发送脚本块。
RegisterStartupScript() 用于添加要在加载页面后运行的脚本块,通过这种方法添加的脚本块位于 Web 窗体的结尾处,因为必须在脚本运行前定义脚本要修改的 HTML 元素。也就是说,如果您要使用客户端脚本将焦点设置到文本框,必须确保文本框的 HTML 标记位于设置该文本框的焦点的脚本之前。
如果你仅仅是注册一些函数,这两者的效果是一样的。但如果你要注册一些全局的脚本,如定义一些全局变量并赋值,那么它在HTML中的先后位置可能就比较重要,此时就应该用RegisterStartupScript保证脚本能在前面被执行。
运行后生成的源文件:
< HTML >
< HEAD >
< title > WebForm5 </ title >
< meta name ="GENERATOR" content ="Microsoft Visual Studio .NET 7.1" >
< meta name ="CODE_LANGUAGE" content ="Visual Basic .NET 7.1" >
< meta name ="vs_defaultClientScript" content ="JavaScript" >
< meta name ="vs_targetSchema" content ="http://schemas.microsoft.com/intellisense/ie5" >
</ HEAD >
< body >
< form name ="Form1" method ="post" action ="WebForm5.aspx" id ="Form1" >
< input type ="hidden" name ="__VIEWSTATE" value ="dDwtNjU0MzcyMTk1Ozs+xxQ3E05ag4Me8uTAnG3LTO9zgAg=" />
< input type ="button" value ="ClickMe" onclick ="OnClick()" >
< span id ="showMessage2" ></ span >
< script language =JavaScript > function OnClick(){showMessage2.innerHTML = ' < h4 > Welcome to Microsoft.NET !</ h4 > '} </ script >
</ form >
</ body >
</ HTML >
我就不具体说了,有兴趣的话,
自己可以仿照贴出来的代码试一下。
KeyWord: javascript,RegisterClientScriptBlock,RegisterStartupScript,Page,script