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 |
// 最常用:檢查整頁是否通過驗證
if (Page.IsValid) { /* 存資料庫 */ }
// 所有驗證控件集合
foreach (BaseValidator v in Page.Validators) { ... }
// 手動觸發驗證 (預設在 PostBack 自動觸發)
Page.Validate();
Page.Validate("ValidationGroup"); // 針對特定群組
WebUIValidation.js),EnableClientScript=true 時自動啟用,提供即時視覺回饋 (紅字、星號、彈窗)。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。Page.IsValid。ErrorMessage (Summary用) 與 Text (控件旁顯示用,如 "*")。Display="Dynamic" 避免佔版面;SetFocusOnError="true" 提升 UX。CustomValidator + 伺服器端邏輯,JS 僅做輔助。trace、debug,驗證腳本自動最佳化。驗證控件是 ASP.NET WebForms 最成功的設計之一,掌握其架構能讓表單開發事半功倍。