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

ASP.NET 驗證控件完整實戰:客戶端與伺服端雙重防護

     編輯:ASP.NET 基礎

六大內建驗證控件

控件用途關鍵屬性
RequiredFieldValidator必填欄位ControlToValidate, InitialValue
CompareValidator比較兩控件值或與固定值比較ControlToCompare, ValueToCompare, Operator, Type
RangeValidator數值/日期範圍MinimumValue, MaximumValue, Type
RegularExpressionValidator正則表達式格式驗證ValidationExpression
CustomValidator自訂邏輯(客戶端 JS + 伺服端 C#)ClientValidationFunction, OnServerValidate
ValidationSummary彙總顯示所有錯誤訊息ShowMessageBox, ShowSummary, HeaderText

共同基類 BaseValidator 核心屬性

  • ControlToValidate:指定被驗證控件 ID。
  • ErrorMessage / Text:驗證失敗顯示文字。
  • Display:None/Static/Dynamic 控制錯誤訊息佔位方式。
  • EnableClientScript:是否產生客戶端腳本(預設 true)。
  • ValidationGroup:分組驗證,配合按鈕 ValidationGroup 實現單頁多表單獨立驗證。
  • SetFocusOnError:失敗時自動焦點到該控件。

驗證策略:客戶端 vs 伺服端

  • 客戶端驗證:即時回饋、減少回傳、提升體驗。適用:長度、格式、必填、邏輯簡單運算。不可信任,使用者可停用 JS 或偽造請求。
  • 伺服端驗證:最終防線,業務規則、資料庫唯一性、權限檢查、資安相關。必須實作。
  • 混合模式:預設行為,Page.IsValid 綜合判斷雙端結果。

CustomValidator 雙端實作範例:驗證輸入為偶數

客戶端 JavaScript

function ValidateEven(source, args) {
    var val = parseInt(args.Value, 10);
    args.IsValid = !isNaN(val) && (val % 2 === 0);
}

伺服端 C#

protected void cvEven_ServerValidate(object source, ServerValidateEventArgs args)
{
    int val;
    args.IsValid = int.TryParse(args.Value, out val) && (val % 2 == 0);
}

標記

<asp:TextBox ID="txtNumber" runat="server" />
<asp:CustomValidator ID="cvEven" runat="server"
    ControlToValidate="txtNumber"
    ErrorMessage="必須為偶數"
    ClientValidationFunction="ValidateEven"
    OnServerValidate="cvEven_ServerValidate"
    Display="Dynamic" />
<asp:Button ID="btnSubmit" runat="server" Text="送出" ValidationGroup="vg1" />
<asp:ValidationSummary ID="vs1" runat="server" ValidationGroup="vg1" HeaderText="錯誤清單:" />

進階技巧

  • 驗證群組:單頁多表單(如登入/註冊並存)時,給各區塊控件與按鈕相同 ValidationGroup。
  • 手動觸發:Page.Validate("vg1"); if (Page.IsValid) ...。
  • 動態控件驗證:Page.LoadComplete 階段動態加入驗證控件並 Page.Form.Controls.Add。
  • 取消驗證:按鈕 CausesValidation="false"(如「取消」、「重設」按鈕)。

常見誤區

  1. 以為客戶端驗證通過就安全 → 錯,伺服端必須再驗證一次。
  2. RegularExpressionValidator 正則未加 ^...$ 導致部分匹配誤判。
  3. 忘記設定 ValidationGroup 導致無關按鈕觸發全頁驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved