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

ASP.NET 2.0 控制項簡易非同步回呼實作:ICallbackEventHandler 與 Render 階段註冊

     編輯:關於ASP.NET

控制項實作 ICallbackEventHandler

自訂控制項繼承 WebControl 並實作 ICallbackEventHandler,提供無整頁回傳的伺服器互動。

Render 階段輸出輸入框與失焦觸發

protected override void RenderContents(HtmlTextWriter output) {
    output.RenderBeginTag(HtmlTextWriterTag.Div);
    output.AddAttribute(HtmlTextWriterAttribute.Type, "text");
    output.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
    output.AddAttribute(HtmlTextWriterAttribute.Name, ClientID);
    output.AddAttribute(HtmlTextWriterAttribute.Value, Text);
    output.AddAttribute("onblur", "ClientCallback();"); // 失焦觸發
    output.RenderBeginTag(HtmlTextWriterTag.Input);
    output.RenderEndTag(); // input
    output.RenderEndTag(); // div
}

OnPreRender 註冊客戶端回呼腳本

protected override void OnPreRender(EventArgs e) {
    base.OnPreRender(e);
    // 取得焦點
    Page.ClientScript.RegisterStartupScript(typeof(Page), "ControlFocus",
        "document.getElementById('" + ClientID + "').focus();", true);
    // 註冊回呼函式
    string callbackRef = Page.ClientScript.GetCallbackEventReference(this, "args", "CallbackHandler", null, "ErrorHandler", true);
    Page.ClientScript.RegisterStartupScript(typeof(Page), "ClientCallback",
        "function ClientCallback() { args=document.getElementById('" + ClientID + "').value;" + callbackRef + " }", true);
}

伺服器端處理 RaiseCallbackEvent

public string RaiseCallbackEvent(string eventArgument) {
    int result;
    if (!Int32.TryParse(eventArgument, out result))
        throw new Exception("輸入必須為數字");
    return "Valid Data";
}

客戶端 JScript.js 處理回呼結果

function CallbackHandler(args, ctx) { alert("資料驗證通過:" + args); }
function ErrorHandler(args, ctx) { alert("錯誤:" + args); }

關鍵點總結

  • GetCallbackEventReference 產生 WebForm_DoCallback 呼叫鏈。
  • 控制項需實作 RaiseCallbackEvent 回傳字串結果。
  • 適用於輕量驗證、即時計算;複雜 UI 更新建議改用 UpdatePanel 或前端框架。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved