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

ASP.NET TextBox 點擊 Button 不觸發 LostFocus:焦點轉移機制與服務端驗證

     編輯:程式設計綜合問答

現象

用戶在 TextBox 輸入後直接點擊 Button 提交,TextBox 的 LostFocus / TextChanged (AutoPostBack) 事件未觸發,導致後台依賴該事件的邏輯(如查詢單位 ID)失效。

根因

ASP.NET WebForms 按鈕點擊提交表單 時,瀏覽器不會觸發輸入框的 blur 事件(焦點仍在輸入框),因此客戶端 onblur / 服務端 TextChanged 不執行。

解決方案

  1. 服務端統一驗證(推薦):
    在 Button Click 事件中,集中讀取所有輸入控件的 Text 屬性,執行業務邏輯(查詢 ID、驗證、轉換)。
    不要依賴 LostFocus/TextChanged 執行關鍵業務,它們僅作輔助即時提示。
  2. 客戶端強制觸發(治標):
    給 Button 添加 OnClientClick:
    <asp:Button ID="btnSubmit" runat="server" Text="提交"
        OnClientClick="document.activeElement.blur();" />
    提交前讓當前焦點元素失去焦點,觸發 onblur / TextChanged(若 AutoPostBack=true 則會先觸發一次回郵,體驗差)。
  3. UpdatePanel 部分回郵:
    將 TextBox 放入 UpdatePanel,AutoPostBack="true",OnTextChanged 執行查詢並更新隱藏字段/Label,Button 提交時讀取隱藏字段值。

最佳實踐原則

  • 輸入驗證/業務邏輯集中在提交動作,而非焦點變化。
  • 即時提示(如遠程查詢單位名稱)用 WebMethod + AJAX (jQuery .blur() / .change()) 異步調用,更新 UI,不依賴回郵。
  • 服務端始終重新驗證所有輸入,防止繞過客戶端檢查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved