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

ASP.NET __doPostBack 函數深度解析:客戶端觸發伺服器端事件機制

     編輯:關於ASP.NET

__doPostBack 是 ASP.NET 自動產生的 JavaScript 函數,透過兩個隱藏欄位 (__EVENTTARGET、__EVENTARGUMENT) 將客戶端動作轉換為伺服器端事件觸發。掌握其運作原理,能實現進階的客戶端與伺服器端互動。

自動產生條件

頁面包含以下任一元素時自動產生:
  • 設定 AutoPostBack="true" 的控制項
  • 包含編輯/刪除/選取命令欄的 DataGrid/GridView
  • 其他需回傳的伺服器控制項

核心機制

function __doPostBack(eventTarget, eventArgument) {
    var theform;
    if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
        theform = document.forms["Form1"];
    } else {
        theform = document.Form1;
    }
    theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
    theform.__EVENTARGUMENT.value = eventArgument;
    theform.submit();
}

配合兩個隱藏欄位:

<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />

參數說明

實戰範例:客戶端按鈕觸發隱藏伺服器按鈕事件

  1. 新增伺服器按鈕 Button1 (Visible=false),撰寫 Click 事件
  2. 新增 DropDownList 設定 AutoPostBack=true (確保產生 __doPostBack)
  3. 客戶端按鈕:<input type="button" onclick="__doPostBack('Button1','')" />
  4. 點擊客戶端按鈕 → 觸發 Button1 伺服器端 Click 事件

關鍵注意事項

  • 大小寫不敏感:__doPostBack('button1','') 同樣有效
  • 命名容器分隔符:客戶端傳 $,伺服器端轉為 : (見原始碼 split("$").join(":"))
  • ViewState 依賴:事件驗證需 ViewState 啟用

進階應用場景

  • JavaScript 驗證通過後手動觸發伺服器事件
  • jQuery/AJAX 完成後同步觸發傳統回傳
  • 動態產生的控制項事件綁定

理解 __doPostBack 內部運作,是掌握 ASP.NET 客戶端/伺服器端互動核心關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數說明範例
eventTarget觸發事件的控制項 UniqueID (含命名容器分隔符 $ 或 :)"GridView1$ctl02$btnEdit"
eventArgument事件額外參數 (CommandArgument 等)"Edit$3"