您的位置:首页 > 编程学习 > ASP.NET > 正文

RegisterClientScriptBlock与RegisterStartupScript区别

更多 时间:2014-5-5 类别:编程学习 浏览量:1432

RegisterClientScriptBlock与RegisterStartupScript区别

RegisterClientScriptBlock与RegisterStartupScript区别

一、前端输出脚本有以下三种方法

 

方法1,使用Response.Write

这种方法会把JS代码写在页面的最顶部(<html>的前面):


System.Web.HttpContext.Current.Response.Write("<script language=javascript>alert('JS代码');</script>");

 

方法2,使用RegisterStartupScript

这种方法会把JS代码嵌入在页面的底部、表单的最后 (</form>前面),适用于要在页面控件加载完成后运行的JS代码 :


System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(),"clientScript"))
    page.ClientScript.RegisterStartupScript(page.GetType(), "clientScript", "<script language=javascript>alert('JS代码');</script>");

 

方法3,使用RegisterClientScriptBlock

这种方法会把JS代码嵌入在页面的顶部、表单的最前 (<form>后面),适用于要在控件加载前执行的JS代码,类似于上面的Response.Write方式 :
 

System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsClientScriptBlockRegistered(page.GetType(),"clientScript"))
    page.ClientScript.RegisterClientScriptBlock(page.GetType(), "clientScript", "<script language=javascript>alert('JS代码');</script>");

 

 

二、RegisterClientScriptBlock 与 RegisterStartupScript的构造函数

RegisterStartupScript(key, script)
RegisterClientScriptBlock(key, script)

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

  • 这两个方法的作用都是从前台向后台写脚本,且都接受两个相同的参数:
  • 第一个参数 key 是插入的客户端脚本的唯一标识符。
  • 第二个参数 script 是要插入到页面中的客户端脚本内容,包括 <script> 的起始标记和终止标记</script>。
  •  

     

    三、RegisterClientScriptBlock 与 RegisterStartupScript的区别

     

    1、这两个方法唯一的不同之处在于向“何处”注册脚本块。

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

    RegisterClientScriptBlock 方法是将 JavaScript 嵌入到页面中开启元素 <form> 的紧后面。

     

    2、例如

    (1).使用Page.ClientScript.RegisterClientScriptBlock

  •  
  • C# 代码   复制
  • 
    代码 
    <%@ Page Language=”C#” %>
     <script runat=”server”>
     protected void Page_Load(object sender, EventArgs e)
    {
     string myScript = @”function AlertHello() { alert(‘Hello ASP.NET’); }”;
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
    “MyScript”, myScript, true);
    }
    </script>
    
    		
  •  

    运行结果如下:

  •  
  • HTML 代码   复制
  • 
    <html>
    <head><title>
    Adding JavaScript
    </title></head>
    <body>
        <form method=”post” action=”JavaScriptPage。aspx” id="”form1”">
            <li>
                <input type=”hidden” name=”__VIEWSTATE”
                value=”/wEPDwUKMTY3NzE5MjIyMGRkiyYSRMg+bcXi9DiawYlbxndiTDo=” />
            </li>
            <script type=”text/javascript”>
            <!--
            function AlertHello() { alert(‘Hello ASP.NET’); }// -->
            </script>
            <li>
                <input type=”submit” name=”Button1” value=”Button” onclick=”AlertHello();”
                id="”Button1”" />
            </li>
        </form>
    </body>
    </html>
    
    		
  •  

    (2).使用Page.ClientScript.RegisterStartupScript

    RegisterStartupScript 方法与RegisterClientScriptBlock方法最大的不同是:RegisterStartupScript 把script放置在 ASP.NET page的底部,而RegisterClientScriptBlock把script放置在ASP.NET page的顶部。

    如果你的页面中有如下代码:

    <asp:TextBox ID=”TextBox1” Runat=”server”>Hello ASP.NET</asp:TextBox>

  •  
  • C# 代码   复制
  • 
    protected void Page_Load(object sender, EventArgs e)
    {
      string myScript = @”alert(document.forms[0][‘TextBox1’].value);”;
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), “MyScript”, myScript, true);
    }
    
    		
  • 此页面运行时会报错,原因是JavaScript function先于text box被安放于浏览器。因此JavaScript function找不到TextBox1。
     

    应该为:

  •  
  • C# 代码   复制
  • 
    protected void Page_Load(object sender, EventArgs e)
    {
      string myScript = @”alert(document.forms[0][‘TextBox1’].value);”;
      Page.ClientScript.RegisterStartupScript(this.GetType(), “MyScript”, myScript, true);
    }
    
    		
  • 这段代码把JavaScript function放置于ASP.NET page底部,因此JavaScript运行时它能找到TextBox1。
     

     

    标签:ASP.NET