在Page類裡有幾個方法:
RegisterClientScriptBlock 可以向頁面中發送用戶端代碼塊(當然可以不僅僅是指令碼,也可以是其它的文本),這段代碼會被寫到Form裡的開始部分
IsClientScriptBlockRegistered 根據一個頁面級的Key來判斷某段由RegisterClientScriptBlock發送的用戶端代碼是否已被發送到了用戶端。
RegisterStartupScript 可以向頁面中發送用戶端代碼塊,這段代碼會被寫到Form裡的結束部分。這樣就可以如其名稱一樣,在頁面載入完成後寫入一段自動啟動並執行代碼
IsStartupScriptRegistered 根據一個頁面級的Key來判斷某段由RegisterStartupScript發送的用戶端代碼是否已被發送到了用戶端
RegisterClientScriptBlock在 Page 對象的 元素的開始標記後立即發出用戶端指令碼
RegisterStartupScript則是在Page 對象的 元素的結束標記之前發出該指令碼
通過上面的幾個方法就可以解決上述的兩個問題。
樣本:
//產生用戶端指令碼
private string GetClientScript()
{
return @"<script language=""javascript"">
function ClientFunction()
{
具體的實現
}
</script>";
}
//產生自動啟動並執行用戶端指令碼
private string GetClientStartUpScript()
{
return @"<script language=""javascript"">
具體的實現
</script>";
}
//在預呈現事件裡加入用戶端指令碼
protected override void OnPreRender(EventArgs e)
{
if(!Page.IsClientScriptBlockRegistered("ClientScriptKey1"))
Page.RegisterClientScriptBlock("ClientScriptKey1",GetClientScript());
Page.RegisterStartupScript("ClientScriptKey2",GetClientStartUpScript());
base.OnPreRender(e);
}
向頁面註冊用戶端指令碼要在預呈現裡完成,如果在Redner裡來做則不會啟作用。
在寫大段的用戶端指令碼時,可以在文本前加入@,這樣,引起來的字元器的換碼序列將“不”被處理,這樣就可以輕鬆寫出字串。如果要在字元器裡包括一個雙引號,請使用兩對雙引號。