2017-06-09 22 views
1

登録ページに2つのテキストボックスフィールドがあり、いずれかまたは検証タイプを設定しようとしています。両方のフィールドが空の場合、妥当性検査を開始する必要があります。登録できるようにするには、AフィールドまたはBフィールドのいずれかを入力する必要があります。2つのテキストボックスで検証を入力するか、ASP.NET Webフォーム

私のコードでは以下のようなカスタムバリデータを使用していますが、動作していないようです。私はこれらの2つのテキストボックスを検証するスマートな方法を探しています。サーバー側のバリデーションの部分:私はそれをテストしたとき、ブレークポイントは決して関数にヒットしません。誰かがこれを行うきれいな方法を提案することができます。

ページの他のコントロールでは、フィールドバリデーターが必要ですが、これらの2つのテキストボックスのいずれかまたは条件を設定できる必要があるため、ここにフィールドバリデーターはありません。

<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> 

クライアント側コード:

<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 { 

      } 


     }); 

サーバーサイドコード:

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); 
      } 
     } 

答えて

0

あなたはCustomValidator制御のClientValidationFunction属性を使用する必要があります。また、javascript関数内では、args.IsValidプロパティをtrueまたはfalseに設定する必要があります。たとえば :

<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> 

と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> 

編集:テキストボックスが空の場合、それは検証イベントをトリガしない可能性があります。これを克服するには、カスタムバリデーターにValidateEmptyText="true"属性を追加するか、別の必須フィールドバリデーターを使用して空の値を検証できます。

+0

@M Idrees:私はあなたのアプローチを試みましたが、クライアント側は動作しませんでした。この場合はサーバー側ではありません。 –

+0

誰かが別のアプローチを提案できますか? –

+0

テキストボックスが空であることを検証しようとしていますか?私はそれが価値があるまでバリデータを引き起こさないと思う。空の値を検証するには、RequiredFieldValidatorを使用します。 –

関連する問題