提升系統健壯性的兩大原則:
| 維度 | 客戶端驗證 | 伺服器端驗證 |
|---|---|---|
| 技術 | JavaScript / VBScript | C# / VB.NET |
| 優點 | 即時回饋、減少頻寬、降低伺服器負載 | 邏輯隱藏、難以繞過、程式撰寫容易 |
| 缺點 | 程式碼可見、可被繞過、版權難控制 | 需 Postback、增加伺服器負擔、回饋較慢 |
最佳實踐:雙層驗證 - 客戶端攔截 90% 非惡意錯誤,伺服器端攔截繞過與商業邏輯錯誤。
所有驗證控件繼承 `BaseValidator`,共同屬性:
確保控件值非空白 (預設比較 `InitialValue`,可自訂)。
<asp:RequiredFieldValidator
ControlToValidate="txtName"
ErrorMessage="姓名為必填"
InitialValue="請輸入姓名" />
比較兩控件值、或控件值與常值。`Operator`:`Equal`、`NotEqual`、`GreaterThan`、`LessThan`、`DataTypeCheck`。`Type`:`String`、`Integer`、`Double`、`Date`、`Currency`。
<!-- 確認密碼 -->
<asp:CompareValidator
ControlToValidate="txtConfirmPwd"
ControlToCompare="txtPwd"
Operator="Equal"
ErrorMessage="兩次密碼不一致" />
<!-- 日期格式檢查 -->
<asp:CompareValidator
ControlToValidate="txtBirth"
Operator="DataTypeCheck"
Type="Date"
ErrorMessage="日期格式錯誤" />
驗證值在指定範圍內 (`MinimumValue`、`MaximumValue`、`Type`)。
<asp:RangeValidator
ControlToValidate="txtAge"
MinimumValue="18"
MaximumValue="100"
Type="Integer"
ErrorMessage="年齡需在 18-100 之間" />
RegularExpressionValidator 使用的正則引擎為 .NET `System.Text.RegularExpressions`,支援完整語法:
集中顯示頁面 (或群組) 所有驗證錯誤。`ShowMessageBox="true"` 可彈出訊息盒;`ShowSummary="true"` 顯示清單;`HeaderText` 設定標題。
<asp:ValidationSummary
ID="valSummary"
runat="server"
HeaderText="發現以下錯誤:"
DisplayMode="BulletList"
CssClass="alert alert-danger"
ShowMessageBox="true"
ShowSummary="false" />
同一頁面有多個表單 (如登入、註冊、搜尋) 時,設定各表單控件與按鈕相同 `ValidationGroup`,按鈕點擊時僅觸發該群組驗證。
ASP.NET 提供完整的聲明式驗證控件體系,涵蓋必填、比較、範圍、正則、自訂等需求。理解雙層驗證策略、基礎控件屬性與分組機制,是建立健壯 Web 表單的基石。下篇將深入 `RegularExpressionValidator`、`CustomValidator` 與進階客戶端腳本整合。