Page.ClientScript.GetCallbackEventReference 讓頁面或控制項實作 ICallbackEventHandler,生成客戶端呼叫伺服器、接收回傳資料的 JavaScript 程式碼,無需整頁回傳。
string callbackRef = Page.ClientScript.GetCallbackEventReference(
this, // 實作 ICallbackEventHandler 的頁面/控制項
"message", // 傳遞給伺服器 RaiseCallbackEvent 的引數
"ShowServerTime", // 客戶端接收回傳資料的 callback 函式名稱
"context", // 客戶端內容物件(可為 null)
"ErrorHandler", // 錯誤處理函式(可選)
true // 是否非同步
);
產生的客戶端代碼:WebForm_DoCallback('__Page', arg, ReceiveServerData, context, null, false)。
伺服器端 (ServerTime.aspx.cs)
public partial class ServerTime : Page, ICallbackEventHandler {
protected string CallbackScript;
protected void Page_Load(object sender, EventArgs e) {
CallbackScript = Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context");
}
public string RaiseCallbackEvent(string eventArgument) {
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
客戶端 (ServerTime.aspx)
<script>
function GetServerTime() {
var message = ''; var context = '';
<%= CallbackScript %> // 註入呼叫代碼
}
function ShowServerTime(timeMessage, context) {
alert('伺服器時間:' + timeMessage);
}
</script>
<input type="button" value="取得伺服器時間" onclick="GetServerTime();" />
Page_Load 產生字串屬性,前端 <%= %> 輸出。OnPreRender 使用 RegisterStartupScript 註冊完整呼叫函式。Render 階段直接輸出 onclick 等屬性。