Page.ClientScript.RegisterStartupScript 與 Page.ClientScript.RegisterClientScriptBlock 之間的區別

Page.ClientScript.RegisterStartupScript 與 Page.ClientScript.RegisterClientScriptBlock 被用來註冊腳本塊。第一個是 RegisterStartupScript 方法。當您有一個想要在頁面加載時啓動的 JavaScript 函數時,最好使用該類。就此列舉一例,在 Visual Studio 2005 中創建一個包含兩個按鈕的 ASP.NET 頁面。Button1 和 Button2 分別爲這兩個按鈕的 ID。然後,在 Page_Load 事件內部嵌入以下代碼 

C#:

Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript",   "function AlertHello() { alert('你好,ASP.NET'); }", true);
Button1.Attributes["onclick"] = "AlertHello()";Button2.Attributes["onclick"] = "AlertHello()";

RegisterStartupScript 方法的兩個可能結構如下:

RegisterStartupScript (type, key, script)

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

在上例中,您指定了類型 Me.GetType()、關鍵字及包含的腳本,然後是一個值爲 True 的布爾值(以便 .NET 自動使用 <script> 標記將腳本嵌入 ASP.NET 頁面中)。Page.ClientScript.RegisterStartupScript 與 Page.ClientScript.RegisterClientScriptBlock 之間的區別

主要區別在於,RegisterStartupScript 方法是將 JavaScript 嵌入到 ASP.NET 頁面的底部,恰好位於關閉元素 </form> 的前面。RegisterClientScriptBlock 方法是將 JavaScript 嵌入到頁面中開啓元素 <form> 的緊後面。那麼,這有何不同呢?正如我們將要看到的,這有很大的不同。

就此列舉一例,以下是在頁面加載到瀏覽器時,將焦點置於該頁面上的一個文本框中的方法 - 使用利用了 RegisterStartupScript 方法的 Visual Basic:

Page.ClientScript.RegisterStartupScript(Me.GetType(), "Testing", _   "document.forms[0]['txtText'].focus();", True)

由於在瀏覽器運行到頁面底部並執行此小段 JavaScript 時,就已生成了頁面上的文本框,並已將其放到了頁面中,因此,此方法運行正常。但是,如果不按照上述方法,而編寫如下代碼(使用 RegisterClientScriptBlock 方法):

Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Testing", _  "document.forms[0]['txtText'].focus();", True)

文本框控件將不會獲得焦點,且會在頁面上生成一個 JavaScript 錯誤(如圖 4 所示)。


圖 1. 執行 JavaScript 時出錯

出錯的原因在於,瀏覽器將先遇到 JavaScript,而後文本框纔會出現在頁面中。因此,JavaScript 將無法找到 txtText

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章