Qi Zai ~~ ~~
只为成功找方法,不为失败找借口!

这几天做项目的时候又碰到往前台打脚本,其实以前用过了,今天特意拿出来总结一下两者(RegisterClientScriptBlock/RegisterStartupScript)的区别:

1.Page.RegisterClientScript
Block方法:
客户端脚本刚好在Page对象的<form runat=”server”>元素的开始标志后发出。

RegisterClientScriptBlock() 方法用于为响应客户端事件而执行的脚本代码。通过此方法发送的脚本块位于 Web 页面的开始处,因为这种方法不要求将脚本块置于所有 HTML 元素之后,即它一般不使用文档内自定义的控件

 以下是该方法的一个使用实例:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm5.aspx.vb" Inherits="WebApplication4.WebForm5" %>
<!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>

 

   Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
' 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

运行后生成的源文件:

<!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 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保证脚本能在前面被执行。


运行后生成的源文件

<!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 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

posted on 2007-08-13 23:15  Blue Sky  阅读(915)  评论(2编辑  收藏  举报