Response.Write的產生HTML代碼,你會發現Response.Write方法產生的程式碼是寫到了HTML代碼的最開始,即標籤之前。此時,所有的 HTML對象都還沒有產生,如果要想使用HTML內的對象,並與之互動,就會出現“找不到對象”的錯誤。因此,筆者推薦一個更加符合CodeBehind方式的方式----使用RegisterXXX方法。RegisterXXX包括:RegisterClientScriptBlock、RegisterStartupScript以及用於判斷的IsStartupScriptRegistered函數。
RegisterStartupScript 的原型是:
Overridable Public Sub RegisterStartupScript( _
ByVal key As String, _
ByVal script As String _
)
其中:key表示這個指令碼的唯一標識,script是代表指令碼的字串。
RegisterClientScriptBlock的原型與RegisterStartupScript相同,兩個函數不同在於將其包含的指令碼代碼寫入到HTML檔案的不同位置。RegisterClientScriptBlock在 Page 對象的元素的開始標記後立即發出用戶端指令碼,RegisterStartupScript則是在Page 對象的元素的結束標記之前發出該指令碼。如果你的指令碼有與頁面對象(doucument對象)進行互動的語句,則推薦使用RegisterStartupScript,反之如果要想用戶端指令碼儘可能早的執行,則可以使用RegisterClientScriptBlock或Response.Write。
如:
ClientScript.RegisterStartupScript(GetType(), "", "<script>if(confirm('你確認要刪除導航:/"" + GridView1.Rows[index].Cells[2].Text + "/"嗎?')==true) window.open('del.aspx?id="+ID+"');</script>")
為了防止在頁面中反覆加入指令碼,在註冊指令碼時ReisterStartupScript/RegisterClientScriptBlock使用了key作為註冊的Key,然後在程式中可以使用IsClientScriptBlockRegistered作判斷。
轉自:http://blog.csdn.net/haoliumeihua/article/details/4075251