教你只用一个Validator对多个控件进行验证

    这个技巧是非常有用。如果我们有多个控件,我们只用一个验证控件来验证它 。这将减少页面大小和改善性能,因为每个验证控件在客户端都会被渲染成span,如果一个页面包含上百个控件,就会使得页面非常的庞大臃肿。

     在这篇文章的Demo中,动态创建的几个textbox,我只使用一个验证控件去验证它们。

 1.aspx页面上:

代码
<body>
     
<form id="form1" runat="server">
     
<div>
         
<asp:CustomValidator ID="CustomValidator1" runat="server" ></asp:CustomValidator>
        
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
     
</div>
 
     
</form>
 
</body>

 

 

2.在服务端将验证控件和TextBox的onfocus事件关联起来:

 

代码
protected void Page_Load(object sender, EventArgs e)
{
      
if (!IsPostBack)
      {
         
for (int i = 0; i < 10; i++)
         { 
              TextBox tb 
= new TextBox();
              tb.ID 
= "tb" + i.ToString();
              tb.Attributes.Add(
"onfocus""HookUpControl(this,'" + CustomValidator1.ClientID + "')");
              Page.Form.Controls.Add(tb);
         }
      }
}

 

3.HookUpControl函数如下:

 

代码
 function HookUpControl(curObj, validatorClientID) 
 {
            
var validationControl = document.getElementById(validatorClientID);
           validationControl.controltovalidate 
= curObj.id;
            validationControl.clientvalidationfunction 
= "validatetextbox";
            validationControl.validateemptytext 
= "true";
            ValidatorHookupControl(curObj, validationControl);
 }

4.客户端的验证函数如下:

 

代码
 function validatetextbox(sender, args) 
 {
             
if (args.Value == ""
             {
                  sender.errormessage 
= "<b>该栏位不能为空。";
                  sender.innerHTML 
= "<b>该栏位不能为空。";
                  args.IsValid 
= false;
                  
return;
             }
             
if (isNaN(args.Value)) 
             {
                 sender.errormessage 
= "<b>该栏位只能是数字。";
                 sender.innerHTML 
= "<b>该栏位只能是数字。";
                 args.IsValid 
= false;
                 
return;
             }
              
if (Number(args.Value) < 100) {
                  sender.errormessage 
= "<b>该栏位的值不能小于100。</b>";
                  sender.innerHTML 
= "<b>该栏位的值不能小于100。</b>";
                  args.IsValid 
= false;
                  
return;
              } 
 }

 

 

其实主要使用了ValidatorHookupControl(curObj, validationControl)的功能。

 

在第一个TextBox中输入1,提示:该栏位的值不能小于100。

在第二个TextBox中输入a,提示:该栏位只能是数字。

在第三个TextBox输入值,失去焦点后,再删除,提示:该栏位不能为空。。

 

onfocus事件可以换成你相应的事件,validatetextbox函数也可以扩展等等。

下载:/Files/jhxk/Other/WebSite1.zip

 

 

 

posted @ 2010-09-01 17:59  唔愛吃蘋果  阅读(455)  评论(0编辑  收藏  举报