CustomValidator控件使用心得

  前两天在博问上提过一个关于Custom Validation 控件使用的问题结果没有人给与回答。

  具体场景如下:

  1、需要从javascript异步调用服务端的方法才能确定是否校验通过。

  2、配合使用了.net提供的CustomValidator 控件

  如果你遇到和我类似的情况,解决的第一想法可能和我一样。首先会使用全局变量把argument的值存入,然后在成功返回的回调函数中将它的IsValid置为false(当然也可能设为true,但这里为了展现我们的问题就假设它校验一直不成功,始终置为false)。

具体代码如下

Code
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="CustomValidator" ClientValidationFunction="TestValidate"></asp:CustomValidator>
<script>
var globalArg;
function TestValidate(source, arguments)
{
globalArg=arguments;
callServerMethod("aa",CallSuccess);
}
function CallSuccess(result)
{
globalArg.IsValid=false;
}
</script>

  这样行吗?当然是不行了,原因何在,为什么样我们把argument.IsValid=false写在 custom validator的clientvalidationFunction中指定的而的方法中就可以提示校验不过,而放入回调函数就不成了。下边我们先来看custom validator 控件的client部分到底是如何工作的。

custom validator简要工作流程

  我们可以看在页面添加custom validator control后,会在页面的javascript置入了ValidatorOnLoad(),以备在页面载入时运行。其实这方法就是custom validator control 最初始的入口,它为以后的校验工作打下了基础。整个执行顺序大致如下:

  ValidatorOnLoad()->ValidatorHookupControlID(controlID, val)->ValidatorHookupControl(ctrl, val)最终在ValidatorHookupControl方法将ValidatorOnChange(event) attach到我们被校验控件(就是上边的TextBox1)的onchange事件中。

  下边我们再看看ValidatorOnChange(event)又干了啥。 ValidatorOnChange方法也就是当我们change了TextBox1输入值时就会调用它。我们看看它一路下来调用了哪些方法,及各方法的作用。

  ValidatorOnChange->ValidatorValidate(val,null, event)(如果有多种校此方法会调用多次,当然每次val的值就不一样了)->CustomValidatorEvaluateIsValid(val)->ValidatorUpdateDisplay(val)->ValidatorUpdateIsValid()。跟到CustomValidatorEvaluateIsValid方法我们可以看到它才是最终调用clientvalidationFunction指定的自定义javascript方法,通过自定义的方法更改了argument的IsValid属性后,ValidatorUpdateDisplay会根据该值是否要更ErrorMessage的style的visibility值的以确定显示校验错误提示信息。

  了解这个过程后,我们就可以很清楚的明白为何我们开始那样做是不行的了,因为调用服务器的方法是异步的,所以该方法的下边语句并不会等你执行完,而是并行处理的,所以等从服务器端取回值后,再去给argument.IsValid赋值已是错过班车了。所我们解决的办法就是在回调的方法里边手动再将validateOnChange执行一遍,或者是其中的某些方法。本人在解决的这个问题时,只是在回调函数中依次调用了ValidatorValidate(val,null, event)->ValidatorUpdateDisplay(val)->ValidatorUpdateIsValid()。就得到我所要的结果。大致就是这样,可能具体的问题还要具体去分析。不过个人认为了解custom validator contol的client部分的来胧去脉,对于理解整个.net提供的的校验控件的工作原理会有较大的帮助。

以上仅仅是个人浅易理解,不妥之处请指证。

posted on 2008-11-27 02:23 加冰的可乐 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/jun-person/archive/2008/11/27/1340319.html

CustomValidator控件使用心得相关推荐

  1. 解决CustomValidator控件在Wizard控件验证失效果问题

    今天在学习Wizard控件的时候  放了个CustomValidator控件来验证Textbox的内容. 刚开始没有使用 <StepNavigationTemplate></Step ...

  2. CGRidCtrl控件 学习心得

    wuqinxiang0我的:收件箱资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 狂想盼盼 积累点点滴滴 目录视图 摘要视图 订阅 新版论坛系列介绍之二--功能介 ...

  3. CustomValidator控件应用小例

    做网站用户注册时,都要验证用户名是否已经被注册,现在最常见的做法是点了提交以后再在服务器端检查,这样给用户带来很大不便,如果用户名已经被注册就需要返回重输用户名和密码,这样带来了不必要的回发过程.以前 ...

  4. CustomValidator 控件

    ASP.NET CustomValidator 控件 Validation 服务器控件 定义和用法 CustomValidator 控件可对输入控件执行用户定义的验证. 属性属性 描述 BackCol ...

  5. CustomValidator控件

    CustomValidator是用户自定义的验证控件,用来响应用户自定义的验证.可以使JS的客户端函数,也可以是写在后台代码中的服务端验证函数. 以下是CustomValidator的常用属性 属性 ...

  6. [转载]C# PropertyGrid控件应用心得

    最近碰到关于PropertyGrid控件,以前没有使用过,在网上找了一篇不错的文章,转来分享一下!建议查看原文章! 原文链接:http://blog.csdn.net/luyifeiniu/artic ...

  7. 在线文档webOffice控件使用心得

    目前尚无免费的跨浏览器的office文档插件.而收费的有款PageOffice,但是在实际使用时,与直接开启office编辑工具相比,功能上还存在较大差异. 使用WebOffice weboffie可 ...

  8. C#之 DropdownList控件使用心得

    第一部份:20180718  基础应用 取值 1.前台代码: <asp:DropDownList ID="DDLcustomID" runat="server&qu ...

  9. C# PropertyGrid控件应用心得

    目录 PropertyGrid 控件简介  创建 PropertyGrid 控件  何处使用 PropertyGrid 控件  选择对象  自定义 PropertyGrid 控件  显示复杂属性  为 ...

最新文章

  1. Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
  2. Ubuntu 下获得root权限
  3. File类3 文件读取
  4. 在c语言中错误的常数表示是,C语言程序设计试题
  5. 数据科学的原理与技巧 一、数据科学的生命周期
  6. RabbitMQ控制台队列标签的含义
  7. Q119:PBRT-V3,“复合重要性采样”(13.10章节)
  8. AP计算机科学内容HTML,3分钟读懂AP计算机科学原理和计算机科学A的区别!
  9. mysql 指定驱动表_了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表
  10. bin文件用cad打开_DWG图纸文件用CAD怎么打开?CAD软件如何使用?
  11. 全国计算机一级成绩分配,计算机一级ms分值分配
  12. 趣开门APP、微信开门小程序,让开门更简单,更有趣!
  13. rpm 打包及其命令
  14. linux程序cat本地文本文件,linux – 这里有cat的文件
  15. java覆盖的概念_java中覆盖是什么意思?java方法覆盖的概念详解
  16. 魔兽争霸显示比例调整的问题
  17. 网络映射iscsi服务器,群晖iSCSI管理器连接网络硬盘详细介绍和配置使用说明
  18. 大数据的分布式数据库技术的对比
  19. wu-database-lazy-starter(懒人数据库操作-核心增量式更新)
  20. WebRTC技术实现视频及语音聊天

热门文章

  1. mac苹果电脑运行慢卡顿如何释放内存?
  2. 用GBDT构建组合特征
  3. “云擎未来 智信天下”2023移动云大会盛大开幕
  4. SSM新冠疫情服务系统 计算机专业毕设源码49727
  5. cocos creator 2.4.3cc.assetManager.loadRemote 加载不了微信头像
  6. 双核CPU和双芯CPU的区别
  7. 花屏以后计算机重启怎么办,电脑有时候花屏然后重启就好了怎么办
  8. Realtek AmebaZ wifi
  9. 关于在IDEA上开发springboot及其热部署等等问题
  10. Postgresql源码(85)查询执行——表达式解析器分析(select 1+1如何执行)