2017-06-09 4 views
1

Ich habe zwei Textfelder auf der Registrierungsseite und ich versuche, entweder - oder Art der Validierung einzurichten. Die Validierung sollte beginnen, wenn beide Felder leer sind, und Sie sagen, dass Sie eines der Felder A oder B eingeben müssen, um sich registrieren zu können.Entweder oder Typ Validierung für 2 Textfelder - ASP.NET Webforms

Ich habe benutzerdefinierten Validator wie unten in meinem Code verwendet, aber es scheint nicht zu funktionieren. Ich suche nach einer klugen Weise, diese 2 Textkästen zu validieren. Serverseitiger Validierungsteil: Wenn ich es getestet habe, trifft der Unterbrechungspunkt niemals die Funktion. Kann jemand einen sauberen Weg vorschlagen, dies zu tun?

Bitte beachten Sie, dass ich für die anderen Steuerelemente auf der Seite Feldvalidatoren benötigt habe, kann ich hier keine haben, weil ich in der Lage sein sollte, für diese 2 Textfelder eine oder eine Bedingung festzulegen.

<div class="form-group"> 
          <asp:Label Text="" ID="lblSCGrantNumber" runat="server" AssociatedControlID="txtStateCommGrantNumber"> 
           State Commission Number&nbsp; 
          </asp:Label> 
          <asp:TextBox ID="txtStateCommGrantNumber" runat="server" TextMode="SingleLine" placeholder="State Commission Grant Number" AutoCompleteType="None" class="form-control"></asp:TextBox> 
          <%-- <asp:RequiredFieldValidator Display="Dynamic" ID="rfStateCommGrantNumber" Text="Required" SetFocusOnError="true" CssClass="text-danger" ControlToValidate="txtStateCommGrantNumber" runat="server"></asp:RequiredFieldValidator>--%> 
          <asp:CustomValidator ID="stateCommissionGrants" runat="server" OnServerValidate="ServerValidation" OnClientValidate="Validate_textboxes" ControlToValidate="txtStateCommGrantNumber" ErrorMessage="One of the two fields is required" ValidateEmptyText="true"></asp:CustomValidator> 
         </div> 

          <div class="form-group"> 
          <asp:Label Text="" ID="lblGrantNumber" runat="server" AssociatedControlID="txtStateCommGrantNumber"> 
           Grant Number&nbsp; 
          </asp:Label> 
          <asp:TextBox ID="txtGrantNumber" runat="server" TextMode="SingleLine" placeholder="Grant Number" AutoCompleteType="None" class="form-control"></asp:TextBox> 
          <%--<asp:RequiredFieldValidator Display="Dynamic" ID="rfStateCommGrantNumber" Text="Required" SetFocusOnError="true" CssClass="text-danger" ControlToValidate="txtStateCommGrantNumber" runat="server"></asp:RequiredFieldValidator>--%> 
          <asp:CustomValidator ID="grants" runat="server" OnServerValidate="ServerValidation" OnClientValidate="Validate_textboxes" ControlToValidate="txtGrantNumber" ErrorMessage="One of the two is required" ValidateEmptyText="true"></asp:CustomValidator> 
          </div> 

Client-Seite Code:

<script type="text/javascript"> 
     (function Validate_textboxes(sender, args) { 
      var v = document.getElementById('<%=txtStateCommGrantNumber.ClientID%>').value; 
      var v = document.getElementById('<%=txtGrantNumber.ClientID%>').value; 
      if (v == '') { 
       args.IsValid = false; 
      } 
      else { 

      } 


     }); 

server Code:

protected void ServerValidation(object source, ServerValidateEventArgs args) 
     { 
      args.IsValid = txtStateCommGrantNumber.Text.Trim().Length > 0 || txtGrantNumber.Text.Trim().Length > 0; 
      if (!args.IsValid) 
      { 
       CustomValidator customvalidator = new CustomValidator(); 
       customvalidator.IsValid = false; 
       customvalidator.ErrorMessage = "TextBox1 and TexBox2 can't both be empty"; 
       Page.Form.Controls.Add(customvalidator); 
      } 
     } 

Antwort

0

Sie haben ClientValidationFunction Attribut CustomValidator Steuerung zu verwenden. Und innerhalb Javascript Funktion müssen Sie args.IsValid Eigenschaft auf wahr oder falsch setzen. Zum Beispiel:

<asp:Textbox id="text1" runat="server" text=""></asp:Textbox> 
<asp:Textbox id="text2" runat="server" text=""></asp:Textbox> 
<asp:CustomValidator id="CustomValidator1" runat="server" 
    ControlToValidate = "text1" 
    ErrorMessage = "Required" 
    ClientValidationFunction="validate" > 
</asp:CustomValidator> 

Und Javascript:

<script type="text/javascript"> 
    function validate(oSrc, args){ 
      var v1 = document.getElementById('<%=text1.ClientID%>').value; 
      var v2 = document.getElementById('<%=text2.ClientID%>').value; 
      if (v1 == '' && v2 == '') { 
       args.IsValid = false; 
      } 
      else { 
       args.IsValid = true; 
      } 
} 
</script> 

Edit: Wenn das Textfeld des Validierungsereignis auslösen könnte nicht leer ist. Um dies zu umgehen, können Sie dem benutzerdefinierten Validierer das Attribut ValidateEmptyText="true" hinzufügen oder zur Validierung leerer Werte den separaten erforderlichen Feldvalidator verwenden.

+0

@M Idrees: Ich versuchte Ihren Ansatz, aber Client-Seite hat nicht funktioniert. in diesem Fall keine Server-Seite. –

+0

Kann jemand einen anderen Ansatz vorschlagen? –

+0

Versuchen Sie zu validieren, wenn Textfelder leer sind. Ich denke, es würde Validatoren erst auslösen, wenn es einen Wert hat. Um den leeren Wert zu validieren, können Sie RequiredFieldValidator verwenden. –

Verwandte Themen