使用.NET验证控件进行局部验证

我们在使用.NET验证控件的时候,可能会遇到这样的问题。一个页面上有两个表单,都使用了非空的验证控件:RequiredFieldValidator,在对其中一个表单进行提交操作的时候,第二个表单中也会引发验证控件,我们希望两个表单中的验证控件都能独立验证,怎么办?

    

                                        (图1)                                                                          (图2)

首先介绍CausesValidation属性,我们希望在点击“查看投票”的时候不触发验证

<asp:Button ID="btnSearch" runat="server" Text=" 查看投票 " OnClick="btnSearch_Click" CausesValidation="false"/>

设置按钮的 CausesValidation="false" ,这样做并不能解决我们的问题,我们希望在点击“投票”按钮的时候不触发发帖区的两个验证。

如果要用选择地对页面的某些部分进行验证,则需要使用验证控件的某些方法和javascrpt来实现,下面的列表,列举了验证控件中一些方法和属性:

 

其中特别介绍 ValidatorEnable,该方法可以禁用某个控件使用验证功能。

<script language="javascript">
 ValidatorEnable(验证控件, false); 
</script>

如果要禁用全部验证控件,可以配合Page_Validators使用:

<script language="javascript">
for(i=0;i< Page_Validators.length;i++) 
{ 
 ValidatorEnable(Page_Validators[i], false) 
} 
</script>

知道了上面的内容,我们就可以编写我们自己的js进行验证了。

首先给按钮添加onclick事件:在Page_Load事件中添加:

this.Button1.Attributes.Add("onclick","checkform2()");

在页面中添加js脚本:

<script type="text/javascript">
         function checkform2(){
                    for(i=0;i<Page_Validators.length;i++) 
                   { 
                      ValidatorEnable(Page_Validators[i], true);
                   } 
                    ValidatorEnable(document.getElementById("VoteControl1_rptAsk_ctl00_rfv"), false);
                    ValidatorEnable(document.getElementById("VoteControl1_rptAsk_ctl01_rfv"), false);
                    ValidatorEnable(document.getElementById("VoteControl1_rptAsk_ctl02_rfv"), false);
                    ValidatorEnable(document.getElementById("VoteControl1_rptAsk_ctl03_rfv"), false);
                }
 </script>    
ValidatorEnable的第一个参数为 验证控件的dom对象 可以使用getElementById得到。
通过查看网页的源代码可以知道,验证控件实际上就是由span组成的。
<span id="VoteControl1_rptAsk_ctl02_rfv" style="color:Red;display:none;">必输入</span>

这样我们在点击“马上发表”按钮的时候,就不会触发(图2)中的验证控件了。

但是我们在点击“投票”的时候,仍然会触发(图1)中的验证控件。

原理是一样的,在后台添加

this.btnSubmit.Attributes.Add("onclick", "checkform1()");

前台js

<script type="text/javascript">
        function checkform1() 
        { 
          for(i=0;i<Page_Validators.length;i++) 
         { 
          ValidatorEnable(Page_Validators[i], true);
         } 
          ValidatorEnable(document.getElementById("MsgBoardControl1_RequiredFieldValidator2"), false);
          ValidatorEnable(document.getElementById("MsgBoardControl1_RequiredFieldValidator1"), false);
        }
    </script>

这样就可以实现验证控件局部验证的功能。

图2中的列表实际上是使用repeater循环出来的,如果要在循环中使用验证控件,可以这么写:

<asp:Repeater ID="rptAsk" runat="server">
    <ItemTemplate>
        <asp:RequiredFieldValidator ID="rfv" runat="server" ErrorMessage="必输入" ControlToValidate="rdolist" Display="Dynamic"></asp:RequiredFieldValidator>
        <%#Container.ItemIndex+1 %>.<%#Eval("askcontent") %><br />
        <asp:RadioButtonList ID="rdolist" runat="server">
        </asp:RadioButtonList>
    </ItemTemplate>
    </asp:Repeater>

将验证控件拖到ItemTemplate中,设置ControlToValidate=控件ID,此处是rdolist,这样就是我们想要的效果了。

 

 

posted on 2013-05-08 17:03  追云逐日  阅读(387)  评论(0)    收藏  举报

导航