写一个异步验证控件

image

 

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;
      }
}

 

用上面的验证控件就可以轻松实现异步的验证了

posted @   飞林沙  阅读(509)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示