首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET WebForms AJAX 回發驗證失敗:EnableEventValidation=false 導致 DropDownList 取值失效

     編輯:程式設計綜合問答

錯誤訊息

「回發或回調參數無效。... 啟用了事件驗證 ...」

原因

AJAX 動態更新 DropDownList 選項,導致回發時驗證失敗。設定 EnableEventValidation="false" 雖繞過驗證,但導致 ddlCabinet.Text 取不到值(因 ViewState 未正確追蹤動態項目)。

解決方案

方法一:使用 Request.Form 直接取值(快速修正)

string value = Request.Form["ddlCabinet"]; // 直接從表單集合取得

方法二:正規註冊動態項目(根治)

在 Page_Load 或 Render 階段,將所有可能的選項值註冊給事件驗證:

protected override void Render(HtmlTextWriter writer) {
    foreach (ListItem item in ddlCabinet.Items) {
        ClientScript.RegisterForEventValidation(ddlCabinet.UniqueID, item.Value);
    }
    base.Render(writer);
}

方法三:UpdatePanel 區部更新(推薦)

將 DropDownList 放入 UpdatePanel,由 ASP.NET AJAX 自動處理 ViewState 與事件驗證,避免完整回發。

最佳實務

  • 避免關閉 EnableEventValidation,這會降低安全性(CSRF 風險)。
  • 動態產生選項時,確保在 Page_Init 或 Page_Load (IsPostBack 判斷) 重建完整選項集合。
  • 新專案建議改用 ASP.NET Core MVC / Razor Pages,原生支援 AJAX 無此問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved