惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
H
Heimdal Security Blog
W
WeLiveSecurity
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
The Last Watchdog
The Last Watchdog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
D
DataBreaches.Net
I
Intezer
Webroot Blog
Webroot Blog
C
Cisco Blogs
AWS News Blog
AWS News Blog
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
罗磊的独立博客
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
宝玉的分享
宝玉的分享
博客园 - 叶小钗
PCI Perspectives
PCI Perspectives
D
Docker
Scott Helme
Scott Helme
NISL@THU
NISL@THU
J
Java Code Geeks
B
Blog RSS Feed
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
AI
AI
美团技术团队
Cloudbric
Cloudbric
月光博客
月光博客
P
Proofpoint News Feed
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - 刚刚

【转】Winform中textBox通过正则表达式限制只能输入数字且是两位小数 【转】WinForm中TextBox只能输入数字 【转】C# winform窗体间传值(使用委托或事件) 【转】Visual Studio2019报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字的解决方法 奇虎360诉腾讯QQ垄断案之我见(3Q大战之我见) 超图软件(SuperMap)学习资料:桌面软件(Deskpro) ☠360与腾讯QQ的战争☠之我见 “密码人”越来越多将会出现“密码危机” SuperMap Objects开发——下载安装地址、许可配置和控件加载 决定将本博客技术知识从VS.Net转型SuperMap产品动态与开发 八零年代人的2009年 微软自打击盗版风波后推出了多种正版推广限时促销活动 【转】JavaScript写的Cookie类 ASP.NET开发在JavaScript有中文汉字时出现乱码时简单有效的解决方法 怀疑自己的笔记本电脑可能受到了网络攻击被人监视或操控 Visual Studio.Net 2005中用SqlDataSource处理数据库特殊数据类型 对微软2008年10月20日后推行的打击盗版举措的个人看法 【转】娱乐八卦——关于孙悟空的授业师傅的分析 【转】GIS原理学习
Visual Studio.Net 2005中验证控件的一个使用方法
刚刚 · 2008-11-26 · via 博客园 - 刚刚

      在Visual Studio.Net2005(FrameWork.Net2.0)中有一些很好用的验证控件,我想大家都已经很熟悉了,而且在微软的MSDN和博客园中也有不少同僚们或深或浅地讲解过这些验证控件,那么我在这里就不过多阐述这些验证控件的原理和基本使用了,我要讲解的是什么呢?请先看遇到的问题!

      这些验证控件和服务器控件(如:Button等)都有一个属性就是ValidationGroup,相信应该都很了解。

      第一种常用情况:当您放入几个验证控件和一个服务器控件,而属性ValidationGroup的值都是空值时(即不对其分组验证),点击服务器某个控件(如:Button)就会执行所有验证控件的验证。而假如这个Web页中还有一个服务器控件Button时,属性ValidationGroup值也是空值,那么这两个服务器控件Button都是执行相同的验证,如果想让这两个服务器控件Button执行不同的验证,那么就是我们第二种常用情况了。

      第二种常用情况:分组验证。【A】一个服务器Button(命名为Btn1)执行其中几个验证控件(比如有2个验证控件),【B】而另一个服务器Button(命名为Btn2)执行剩下来的几个验证控件(比如有3个验证控件),那么就需要对属性ValidationGroup进行设置:在【A】中的几个控件(服务器控件和验证控件)的ValidationGroup属性值设置为【vg1】,在【B】中的几个控件(服务器控件和验证控件)的ValidationGroup的属性设置为【vg2】,这样再分别点击两个Button就会执行不同的验证。然而再假如这个Web页中还有一个服务器控件Button(命名为Btn),我们想让这个Button执行所有验证(即执行Btn1的验证又执行Btn2的验证,共5个验证控件),此时我们该怎么办?这就是我们要讲解的内容第三种常用情况了。

      第三种常用情况:即要分组又要统一的验证。接着第二种常用情况中的假设继续叙述,如果把Btn的ValidationGroup属性设置为空值那么是否能达到期望效果呢?答案是“不能”,如果ValidationGroup属性设置为空值,那么在Web页的整个验证过程中会解释成您不希望Btn参与验证,因此此时点击Btn会直接发送页面到后台,那对ValidationGroup属性起名时用【大组.小组】等类似的方法行吗(即Btn中ValidationGroup属性值是【大组】,而Btn1和Btn2中ValidationGroup属性值分别是【大组.小组1】和【大组.小组2】)?答案依旧是“不行”。那怎么办,没有简单可行的办法了吗?当然是有的了,对,就是用JavaScript控制。下面详细介绍一下过程和使用JavaScript达到目的时应该注意的事情。

      我在期望达到第三种常用情况的效果时,也是在Google搜索、百度搜索、MSDN、CSDN和博客园中寻找了很久,不知道是网络中没有,还是大家不常用此种情况验证或者是都会使用了觉得没必要说这个(我很菜,别打我),或是我没有找到。本想找个讲解或是现成例子就不用自己研究了,看来是偷懒不得的。经过研究发现只要服务器控件Button有验证控件与其在一个组中,那么点击服务器控件Button后,先执行OnClientClick规定的JavaScript,再去执行验证操作,那么问题迎刃而解了。

     解决问题的方法及源代码:

     1、三个服务器控件Button和五个验证控件的ValidationGroup属性设置。

Btn          vg          OnClientClick属性值:Btnclick();

Btn1        vg1        OnClientClick属性值:Btn1click();

Btn2        vg2        OnClientClick属性值:Btn2click();

验证1       vg1

验证2       vg1

验证3       vg2

验证4       vg2

验证5       vg     (也可设置为空值,但不能再是vg1或vg2,注意:必须要给Btn设置一个可执行的验证控件)

      2、在Web页中增加一个<Script></Script>JS脚本。  

 1 <script type="text/javascript">
 2 <!--
 3 function Btn1click()
 4 {
 5     document.getElementById('<%=RequiredFieldValidator1.ClientID %>').validationGroup = 'vg1';
 6     document.getElementById('<%=RegularExpressionValidator1.ClientID %>').validationGroup = 'vg1';
 7 }
 8 
 9 function Btn2click()
10 {
11     document.getElementById('<%=RequiredFieldValidator2.ClientID %>').validationGroup = 'vg2';
12     document.getElementById('<%=RegularExpressionValidator2.ClientID %>').validationGroup = 'vg2';
13     document.getElementById('<%=RegularExpressionValidator3.ClientID %>').validationGroup = 'vg2';
14 }
15 
16 function Btnclick()
17 {
18     document.getElementById('<%=RequiredFieldValidator1.ClientID %>').validationGroup = 'vg';
19     document.getElementById('<%=RegularExpressionValidator1.ClientID %>').validationGroup = 'vg';
20     document.getElementById('<%=RequiredFieldValidator2.ClientID %>').validationGroup = 'vg';
21     document.getElementById('<%=RegularExpressionValidator2.ClientID %>').validationGroup = 'vg';
22     document.getElementById('<%=RegularExpressionValidator3.ClientID %>').validationGroup = 'vg';
23 
24 // -->
25 </script>

      这样我们就能达到我们期望的即要分组又要统一的验证。但这里需要注意的就是:每个参与验证的服务器控件Button在没有写任何JavaScript代码都必须分配至少一个验证控件能让其执行,否则您就算写了控制验证控件的JavaScript代码,这个服务器控件也不验证,切记,切记!!!