Asp.Net 中一个控件关联多个验证器时,如何同时只出一个验证器的错误信息

为一个控件绑定多个验证器那是很正常的,例如一个邮件输入框,首先它不能为空,其次不为空时邮件地址必须符合一定的规则,介于此,我们会依次放两个验证器,RequiredFieldValidator 和 RegularExpressionValidator。由于输入为空的时候对于 RegularExpressionValidator 是被认为通过的,所以同时只会显示其中一个验证器的错误信息。

再看个需求,比如输入邮件地址和再次确认的邮件地址,这时需要为第二个邮件输入框加除上两之外的第三个验证器 CompareValidator 用于验证两次输入是否一致,那么三个验证器依次是:

RequiredFieldValidator   RegularExpressionValidator  CompareValidator

如果第一个未验证通过,即输入为空,那其后两个验证器也不会认为不通过而输出错误信息。但是在有输入时,后面两个验证器都不能通过时,你大概不想看到下面那样的显示吧:

你或许只想这时候只显示 "邮件格式错误" 这一条提示,只有邮件格式对了才会进行下一个验证。也就是说当一个控件关联了多个验证器时,需要为它们建立这样一种依赖关系,后一个验证器总是依赖于前一个验证器,只有前一个验证器通过了,才会进行下一个验证。这样就能保证同时只会出现一个验证器的提示信息。

为此最初是考虑用一个 CustomValidator 来替代以上三个验证控件,所有的验证逻辑代码以及不通过时提示什么都要自己一行行编写,着实是麻烦。更要命的是要实现两份代码,客户端的 JS 验证代码,还有服务端的 C# 代码。实现固然是没问题的。

同时还等待着高人出手相助,在 CSDN 上下了这篇贴子:一个控件关联了多个验证器,如何指定它们的依赖关系,果然觅得了一个很棒的答案。仍然是使用以上三个验证器,只要在页面中放入下面一段 JS 代码,它们就能互相协调起来了。

再次使用前面截图的输入,你就发现只会显示一条错误信息:"邮件格式错误",而在确认邮件里输入的是一个与前个框不同的邮件地址时,就只提示 "两次输入不一致"。

确实是很高明,非常的感谢 jshi123 的分享精神。叫谁来写这么一段的话一时半会儿是很难想得到的,不过对照一下生成的页面源文件相信还是不太难理解吧。

类别: .Net. 标签: , . 阅读(378). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar