asp.net中註冊指令碼的兩個方法

來源:互聯網
上載者:User

使用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元素,按照期望的那樣執行。

   

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.