ClientScriptManager 類別透過「鍵值 + 型別」唯一識別腳本,避免不同使用者控制項產生重複腳本。本文示範啟動腳本與用戶端區塊腳本的註冊技巧。
| 方法 | 用途 | 輸出位置 |
|---|---|---|
| RegisterStartupScript | 頁面載入完成後執行(如 alert) | </form> 前 |
| RegisterClientScriptBlock | 定義函式、變數供頁面其他處呼叫 | <form> 後 |
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
// 1. 啟動腳本:頁面載入即彈窗
const string startupKey = "PopupScript";
if (!cs.IsStartupScriptRegistered(cstype, startupKey))
{
string script = "alert('Hello World');";
cs.RegisterStartupScript(cstype, startupKey, script, true);
}
// 2. 用戶端區塊腳本:定義 DoClick 函式
const string clickKey = "ButtonClickScript";
if (!cs.IsClientScriptBlockRegistered(cstype, clickKey))
{
var sb = new StringBuilder();
sb.Append("<script type='text/javascript'> function DoClick() {");
sb.Append("document.getElementById('Message').value='Text from client script.';");
sb.Append("} </script>");
cs.RegisterClientScriptBlock(cstype, clickKey, sb.ToString(), false);
}
}
</script>
<html>
<body>
<form id="Form1" runat="server">
<input type="text" id="Message" />
<input type="button" value="ClickMe" onclick="DoClick()" />
</form>
</body>
</html>
this.GetType() 作為型別識別子,配合唯一鍵值,防止重複註冊。true/false 決定是否自動包裹 <script> 標籤。IsStartupScriptRegistered / IsClientScriptBlockRegistered 檢查,避免重複輸出。