首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 多事件無刷新回調:ICallbackEventHandler 實現單頁多動作處理

     編輯:關於ASP.NET

應用場景

單一頁面包含多個互動元素 (按鈕、下拉選單、文字框),需在無整頁回發情況下分別呼叫伺服器端不同邏輯並更新局部 UI。

核心架構:ICallbackEventHandler + 參數路由

頁面實作 `ICallbackEventHandler`,透過 `eventArgument` 字串攜帶「動作類型」與「參數」,伺服器端解析分派至對應處理方法。

完整實作範例

1. 前端頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MultiCallback.aspx.cs" Inherits="Demo.MultiCallback" %>


多事件回調

 

2. 後置程式碼

using System;
using System.Web.UI;

public partial class MultiCallback : Page, ICallbackEventHandler
{
 private string _callbackResult;

 protected void Page_Load(object sender, EventArgs e)
 {
 // 註冊客戶端回調腳本
 string cbRef = ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
 string script = $"function CallServer(arg, context) {{ {cbRef} }};";
 ClientScript.RegisterStartupScript(GetType(), "MultiCallback", script, true);
 }

 // ICallbackEventHandler 實作
 public void RaiseCallbackEvent(string eventArgument)
 {
 // 解析參數: action=Dog&name=Lucky
 var args = ParseArgs(eventArgument);
 string action = args["action"];
 string name = args["name"];

 switch (action)
 {
 case "Dog":
 _callbackResult = $"action=Dog&msg=汪汪!{name} 正在搖尾巴~";
 break;
 case "Rabbit":
 _callbackResult = $"action=Rabbit&msg=蹦蹦跳跳!{name} 吃紅蘿蔔~";
 break;
 default:
 _callbackResult = "action=Error&msg=未知動作";
 break;
 }
 }

 public string GetCallbackResult() => _callbackResult;

 // 簡易參數解析
 private System.Collections.Generic.Dictionary ParseArgs(string argStr)
 {
 var dict = new System.Collections.Generic.Dictionary();
 if (string.IsNullOrEmpty(argStr)) return dict;
 foreach (string kv in argStr.Split('&'))
 {
 string[] p = kv.Split('=');
 if (p.Length == 2) dict[p[0]] = System.Web.HttpUtility.UrlDecode(p[1]);
 else if (p.Length == 1) dict[p[0]] = "";
 }
 return dict;
 }
}

關鍵技術點

技術說明
ICallbackEventHandler標記頁面/控制項可接收客戶端回調
GetCallbackEventReference產生 `__doCallback` 呼叫代碼,含 `__CALLBACKID`、`__CALLBACKPARAM`
參數序列化`action=Dog&name=xxx` 格式,客戶端/伺服器端對稱解析
RegisterStartupScript註冊 `CallServer` 全域函數,供前端按鈕 onclick 呼叫
ReceiveServerData客戶端回調函數,接收伺服器端 `GetCallbackResult` 回傳字串

優缺點與現代替代

優點缺點
無需 UpdatePanel/ScriptManager,輕量僅支援字串參數/回傳,複雜物件需自行序列化
完整頁面生命週期 (可存取 ViewState/Session)仍執行完整管線,效能不如 Web API/Handler
IE6+ 相容性好錯誤處理、逾時、並發控制需自行實作

現代替代方案

  • ASP.NET Web API / ASP.NET Core Controller:RESTful JSON 端點,`fetch`/`axios` 呼叫。
  • SignalR:雙向即時通訊,伺服器主動推送。
  • PageMethods / [WebMethod]:靜態頁面方法直接暴露為 JSON (需 ScriptManager)。
  • Blazor:WebAssembly 元件模型,C# 直接在瀏覽器執行。

總結

`ICallbackEventHandler` 是 ASP.NET 2.0 時代實現「單頁多動作無刷新」的標準方式,透過 `action` 參數路由分派邏輯。雖已被現代架構取代,但在維護舊系統、受限環境 (無法引入新框架) 時仍具實用價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved