使用.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,这样就是我们想要的效果了。
浙公网安备 33010602011771号