仅在单击页面上的多个按钮之一时运行ASP.Net Custom Validator

时间:2014-06-21 20:23:51

标签: asp.net customvalidator

我在ASP.Net(4.0)页面中有以下代码,其中有2个按钮 - ' Button1'和' Button2',文本框,必填字段验证程序和自定义验证程序。

我希望自定义验证器仅在“按钮1'点击而不是当按钮2'单击,Button2仍需要评估必需的字段验证器。我将如何实现这一目标?

   Input 1:
 <asp:TextBox id="txtCustomData" runat="server"   />
  <asp:CustomValidator id="CustomValidator1"   
      runat="server" ErrorMessage="Number not divisible by 2!"
      ControlToValidate="txtCustomData" 
      ClientValidationFunction="CheckEven"  />
 <br/>
 Input 2:
 <asp:TextBox id="TextBox2" runat="server"    />
    <asp:RequiredFieldValidator ID="rfv1" runat="server" ControlToValidate="TextBox2" 
           ErrorMessage="* Required" ForeColor="Red" > 
     </asp:RequiredFieldValidator>
    <br/>
   <br/>
    <asp:Button id="btn1" runat="server" Text="Button1" />
   <br/>
   <asp:Button id="btn2" runat="server" Text="Button2" />

 <script language="javascript">
<!--
function CheckEven(source, args) {
    var val = parseInt(args.Value, 10);
    if (isNaN(val)) {
        args.IsValid = false;
    }
    else {
        args.IsValid = ((val % 2) == 0);
    }
}
// -->
</script>

更新1: 虽然Rick的回答是一个可能的答案,但我找到了另一种处理这种情况的方法。

当两个按钮需要验证2个不同的验证器且其中一个验证器是自定义验证器时,我可以 使用验证组 。设置ValidationGroup =&#34; Group1&#34;对于Button1,需要评估自定义验证器和ValidationGroup =&#34; Group2&#34;对于需要评估所需字段验证器的Button2,并为相应的验证器包含相同的值。没有必要为文本框包含ValidationGroup。

   Input 1:
 <asp:TextBox id="txtCustomData" runat="server"   />
  <asp:CustomValidator id="CustomValidator1"   
      runat="server" ErrorMessage="Number not divisible by 2!"
      ControlToValidate="txtCustomData" 
      ClientValidationFunction="CheckEven"  />
 <br/>
 Input 2:
 <asp:TextBox id="TextBox2" runat="server"    />
    <asp:RequiredFieldValidator ID="rfv1" runat="server" ControlToValidate="TextBox2" 
           ErrorMessage="* Required" ForeColor="Red" ValidationGroup="Group2"> 
     </asp:RequiredFieldValidator>
    <br/>
   <br/>
    <asp:Button id="btn1" runat="server" Text="Button1" ValidationGroup="Group1"/>
   <br/>
   <asp:Button id="btn2" runat="server" Text="Button2" ValidationGroup="Group2"/>

 <script language="javascript">
<!--
function CheckEven(source, args) {
    var val = parseInt(args.Value, 10);
    if (isNaN(val)) {
        args.IsValid = false;
    }
    else {
        args.IsValid = ((val % 2) == 0);
    }
}
// -->
</script>

更新2: 如果你在按钮 的OnClientClick事件中使用自定义javascript结束 ,那么你需要小心你的javascript,否则你的按钮永远不会回发,即使数据也是如此已验证。

例如,如果你编写了一个名为&#39; ValidateData()&#39;的自定义javascript函数。然后首先确保它总是返回true或返回false语句,然后你的OnClientClick应该以下面显示的方式使用这个函数。 大多数开发人员只需使用OnClientClick =&#34;返回ValidateData();&#34;这将使ASP.Net按钮永远不会执行ASP.Net回发,即使数据被评估为有效,因为ASP.Net中的默认__doPostBack JavaScript函数永远不会被调用(假设UseSubmitBehavior =&# 34; false&#34;对于此按钮,如果UseSubmitBehavior =&#34; true&#34;则不使用__doPostBack并且按钮将回发)。

   <asp:Button id="btn1" runat="server" Text ="Button1" 
        OnClientClick="var r = ValidateData(); if (!r) { return false; } " />
  <script type=<script type="text/javascript">
  function ValidateData( )
     {
       var x = document.getElementById('xy1');
        if(x.value == '1')
         {
           return false;
         }

        return true;
      }
    </script>

1 个答案:

答案 0 :(得分:3)

包含CausesValidation属性并将其设置为False。您的按钮不会触发验证。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation(v=vs.110).aspx

<asp:Button id="btn2" runat="server" Text="Button2" CausesValidation="False"/>