使用Javascript实现.NET验证控件功能
创始人
2024-04-24 11:11:04
0

在我们平时经常会遇到这样的一个问题:当我们选择checkbox时,希望验证一个控件,取消选择,隐藏并取消验证这个控件。如果完全使用服务器事件来实现此功能,肯定用户体现不好,所以我们可以使用javascript实现.net验证控件功能。

首先我们看看.NET验证控件,在页面上做了什么事情。

  1. <asp:TextBoxIDasp:TextBoxID="txtValidator"runat="server"> 
  2. <asp:RequiredFieldValidatorIDasp:RequiredFieldValidatorID="RequiredFieldValidator1"runat="server"  
  3. ControlToValidate="txtValidator"ErrorMessage="RequiredFieldValidator"> 

在页面上解析成:

  1. <inputnameinputname="txtValidator"type="text"id="Text1"/> 
  2. <spanidspanid="Span1"style="color:Red;visibility:hidden;">RequiredFieldValidator 

验证控件在页面变为了一个隐藏的span,需要验证的时候,进行显示。

同时页面上出现了一些用于验证的脚步

  1. <scripttypescripttype="text/javascript"> 
  2. // 
  3. //验证控件的集合,当添加一个验证控件的时候,就会多一个item  
  4. varPage_Validators=newArray(document.getElementById("RequiredFieldValidator1"));  
  5. //]]> 
  6.  
  7. <scripttypescripttype="text/javascript"> 
  8. // 
  9. varRequiredFieldValidator1=document.all?document.all["RequiredFieldValidator1"]:document.getElementById("RequiredFieldValidator1");//找到验证控件  
  10. RequiredFieldValidator1.controltovalidate="txtValidator";//绑定需要验证的控件  
  11. RequiredFieldValidator1.errormessage="RequiredFieldValidator";//显示未验证通过的错误信息  
  12. RequiredFieldValidator1.evaluationfunction="RequiredFieldValidatorEvaluateIsValid";//用于验证的方法  
  13. RequiredFieldValidator1.initialvalue="";  
  14. //]]> 
  15.  
  16. <scripttypescripttype="text/javascript"> 
  17. // 
  18. varPage_ValidationActive=false;  
  19. if(typeof(ValidatorOnLoad)=="function"){  
  20. ValidatorOnLoad();  
  21. }  
  22. functionValidatorOnSubmit(){  
  23. if(Page_ValidationActive){  
  24. returnValidatorCommonOnSubmit();  
  25. }  
  26. else{  
  27. returntrue;  
  28. }  
  29. }  
  30. //]]> 
  31.  

我们通过构造类似的脚本进行控件验证

添加验证span

  1. <asp:CheckBoxIDasp:CheckBoxID="cbSelect"runat="server"Text="选择"onclick="ajusSelectValidator(this,'spantxtUserName')"/> 
  2. <asp:TextBoxIDasp:TextBoxID="txtUserName"runat="server"> 
  3. <spanidspanid="spantxtUserName"style="color:Red;display:none;">

该项不能为空//添加span,用于显示验证信息

添加脚本

  1. <scriptlanguagescriptlanguage="javascript"type="text/javascript"> 
  2. varIsSelectID='<%=cbSelect.ClientID%>';  
  3. vartxtUserName='<%=txtUserName.ClientID%>';  
  4. functionajusSelectValidator(checkbox,validatorID){  
  5. ajustValidator(checkbox,validatorID,txtUserName);  
  6. }  
  7.  
  8. //Validator.Js  
  9. functionajustValidator(checkbox,validatorID,controltoHideID){  
  10. if(checkbox.checked){  
  11. register(validatorID,controltoHideID);  
  12. document.getElementById(controltoHideID).style.visibility="visible";  
  13. }  
  14. else{  
  15. removeValidator(validatorID);  
  16. document.getElementById(controltoHideID).style.visibility="hidden";  
  17. }  
  18. }  
  19. //添加验证关联  
  20. functionregister(validatorID,controltoValidateId){  
  21. Page_Validators.push(document.getElementById(validatorID));  
  22. varspan=document.getElementById(validatorID);  
  23. spanTest.controltovalidate=controltoValidateId;  
  24.  
  25. span.errormessage="*该项不能为空";  
  26. span.display="Dynamic";  
  27. span.evaluationfunction="RequiredFieldValidatorEvaluateIsValid";  
  28. span.initialvalue="";  
  29. //spanTest.style.visibility="visible";  
  30. ValidatorOnLoad();  
  31. }  
  32. //取消验证关联  
  33. functionremoveValidator(validatorID){  
  34. varvalidator=document.getElementById(validatorID);  
  35. if(validator){  
  36. for(vari=0;i;i++){  
  37. if(Page_Validators[i]==validator){  
  38. Page_Validators.splice(i,1);  
  39. i--;  
  40. }  
  41. }  
  42. validator.style.display="none";  
  43. ValidatorOnLoad();  
  44. }  

PS:如果页面上没有验证控件的话,直接执行上面的代码会出错的,因为Page_Validators为null,直接往里面push为抛异常。所以用的时候,要加一个验证的控件。

【编辑推荐】

  1. jQuery调用WCF服务传递JSON对象
  2. JavaScript解析Json字符串 众浏览器性能比较
  3. Services_JSON 1.0.0版发布
  4. 使用JSONP解决跨域数据访问问题
  5. JSON与JAVA的数据转换

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...