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

ASP.NET 表單驗證控件完整指南:驗證控件架構、Page.IsValid 與伺服器/用戶端雙重驗證機制

     編輯:關於ASP.NET

ASP.NET 內建強大的驗證控件體系,徹底解決傳統 ASP 手寫 JavaScript 驗證的維護惡夢。本文系統介紹驗證控件架構、核心屬性與雙重驗證流程。

驗證控件家族

控件用途關鍵屬性
RequiredFieldValidator必填檢查ControlToValidate, InitialValue
CompareValidator比較驗證 (型別、數值、另一控件)ControlToCompare, Operator, Type, ValueToCompare
RangeValidator範圍驗證MinimumValue, MaximumValue, Type
RegularExpressionValidator正則表達式驗證ValidationExpression
CustomValidator自訂邏輯 (伺服器/用戶端)ServerValidate 事件, ClientValidationFunction
ValidationSummary彙總顯示所有錯誤ShowMessageBox, ShowSummary, HeaderText

Page 關鍵驗證成員

// 最常用:檢查整頁是否通過驗證
if (Page.IsValid) { /* 存資料庫 */ }

// 所有驗證控件集合
foreach (BaseValidator v in Page.Validators) { ... }

// 手動觸發驗證 (預設在 PostBack 自動觸發)
Page.Validate();
Page.Validate("ValidationGroup"); // 針對特定群組

雙重驗證機制:用戶端即時回饋 + 伺服器端安全防線

  1. 用戶端:控件渲染 JavaScript (WebUIValidation.js),EnableClientScript=true 時自動啟用,提供即時視覺回饋 (紅字、星號、彈窗)。
  2. 伺服器端:PostBack 時 Page.Validate() 執行各控件 EvaluateIsValid(),不可繞過,確保資料完整性。

兩者邏輯完全一致,CustomValidator 需同時實作 ServerValidate (C#) 與 ClientValidationFunction (JS)。

驗證群組:單頁多表單的關鍵

<asp:TextBox ID="txtLoginUser" runat="server" />
<asp:RequiredFieldValidator ControlToValidate="txtLoginUser" ValidationGroup="Login" />
<asp:Button Text="登入" ValidationGroup="Login" />

<asp:TextBox ID="txtRegEmail" runat="server" />
<asp:RequiredFieldValidator ControlToValidate="txtRegEmail" ValidationGroup="Register" />
<asp:Button Text="註冊" ValidationGroup="Register" />
  • 同群組控件與按鈕配對,互不干擾。
  • Page.Validate("Login") 僅驗證 Login 群組。
  • ValidationSummary 亦可指定 ValidationGroup。

最佳實踐清單

  1. 永遠在儲存資料前檢查 Page.IsValid。
  2. 錯誤訊息設定 ErrorMessage (Summary用) 與 Text (控件旁顯示用,如 "*")。
  3. Display="Dynamic" 避免佔版面;SetFocusOnError="true" 提升 UX。
  4. 複雜規則用 CustomValidator + 伺服器端邏輯,JS 僅做輔助。
  5. 生產環境關閉 trace、debug,驗證腳本自動最佳化。

驗證控件是 ASP.NET WebForms 最成功的設計之一,掌握其架構能讓表單開發事半功倍。

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