写一个异步验证控件
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; } }
用上面的验证控件就可以轻松实现异步的验证了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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 开源的文件压缩处理库,助力快速实现文件压缩解压功能!