2017-06-09 153 views
1

我在註冊頁面上有兩個文本框字段,我正在嘗試設置驗證類型或驗證類型。驗證應該在兩個字段都爲空時啓動,並說您必須輸入A或B字段中的任意一個才能註冊。在2個文本框中輸入或輸入驗證 - ASP.NET Webforms

我在我的代碼中使用了像下面這樣的自定義驗證器,但它似乎不起作用。我正在尋找一種巧妙的方法來驗證這兩個文本框。服務器端驗證部分:當我測試它時,斷點從不碰到函數。有人可以建議一個乾淨的方式做到這一點。

請注意,對於頁面上的其他控件,我需要字段驗證器,我不能在這裏有一個,因爲我應該能夠設置這兩個文本框的任一個或條件。

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