AjaxValidator.js
function AjaxValidatorEvalateValid(val) { var value = ValidatorGetValue(val.controltovalidate); WebForm_DoCallback(val.id, value, AjaxValidatorResult, val, AjaxValidatorError, true);}function AjaxValidatorResult(returnValue, context) { if (returnValue == "True") { context.isvalid = true; } else { context.isvalid = false; } ValidatorUpdateDisplay(context);}function AjaxValidatorError(message) { alert("Error:" + message);}
AjaxValidator.cs
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;/// <summary>///AjaxValidator 的摘要說明/// </summary>public class AjaxValidator:BaseValidator,ICallbackEventHandler{ public event ServerValidateEventHandler ServerValidate; private string _controlToValidate; public AjaxValidator() { // //TODO: 在此處添加建構函式邏輯 // } protected override void OnPreRender(EventArgs e) { string eventRef = Page.ClientScript.GetCallbackEventReference(this, "", "", ""); string includeScript = Page.ResolveClientUrl("~/ClientScripts/AjaxValidator.js"); Page.ClientScript.RegisterClientScriptInclude("AjaxValidator", includeScript); //註冊驗證控制項所觸發的方法 string startScript = String.Format("document.getElementById('{0}').evaluationfunction='AjaxValidatorEvalateValid';", this.ClientID); Page.ClientScript.RegisterStartupScript(this.GetType(), "AjaxValitator", startScript, true); base.OnPreRender(e); } protected override bool DetermineRenderUplevel() { return Context.Request.Browser.SupportsCallback; } protected override bool EvaluateIsValid() { string contraolToValidateValue = this.GetControlValidationValue(this.ControlToValidate); return ExecuteValidationFunction(contraolToValidateValue); } #region ICallbackEventHandler 成員 public string GetCallbackResult() { return ExecuteValidationFunction(_controlToValidate).ToString(); } public void RaiseCallbackEvent(string eventArgument) { _controlToValidate = eventArgument; } #endregion private bool ExecuteValidationFunction(string controlToValidateValue) { ServerValidateEventArgs args = new ServerValidateEventArgs(controlToValidateValue, this.IsValid); if (ServerValidate != null) { ServerValidate(this, args); } return args.IsValid; }}
用上面的驗證控制項就可以輕鬆實現非同步驗證了