BaseValidator,自動獲得 ControlToValidate、ErrorMessage、ValidationGroup 等核心屬性。Pattern、MinLength) 供宣告式設定。AddAttributesToRender 將專屬屬性輸出為 HTML 屬性 (如 data-pattern),供客戶端腳本讀取。EvaluateIsValid 實作伺服器端驗證邏輯 (回傳 bool)。OnPreRender 註冊客戶端驗證腳本 (Page.ClientScript.RegisterClientScriptBlock)。WebUIValidation.js 同目錄,實作 ValidatorValidate 掛鉤函式。核心原則:伺服器端與客戶端驗證邏輯必須完全一致,否則繞過客戶端驗證的惡意請求將通過伺服器端。
伺服器端 (TelNumValidator.cs)
public class TelNumValidator : BaseValidator {
public string Pattern { get; set; } = @"^0\d{1,2}-\d{7,8}$";
protected override bool EvaluateIsValid() {
string val = GetControlValidationValue(ControlToValidate);
return Regex.IsMatch(val, Pattern);
}
protected override void AddAttributesToRender(HtmlTextWriter writer) {
base.AddAttributesToRender(writer);
writer.AddAttribute("data-pattern", Pattern);
}
protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
Page.ClientScript.RegisterClientScriptBlock(GetType(), "TelNumValidatorScript",
@"function TelNumValidatorEvaluateIsValid(val) {
var pattern = val.attributes['data-pattern'].value;
return new RegExp(pattern).test(val.value);
}", true);
}
}
頁面使用
<cc1:TelNumValidator ID="TelNumValidator1" runat="server"
ControlToValidate="txtPhone" ErrorMessage="電話格式錯誤 (ex: 02-12345678)"
Display="Dynamic" />

輸入不符合規則時,動態顯示紅字錯誤訊息,表單送出前攔截。