2015-05-21 14 views
5

Więc już się rozglądam i nie mogę znaleźć podobnego problemu.CompareValidator bez RequiredFieldValidator?

Zasadniczo wygląda na to, że używanie CompareValidator nie działa bez RequiredFieldValidator.

<div class="control-group"> 
       <label class="control-label" for="PositionName"> 
        Password:</label> 
       <div class="controls"> 
        <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox> 
        <%--<asp:RequiredFieldValidator ID="rvPassword" runat="server" ControlToValidate="txtPassword" 
         ErrorMessage="Please Enter Password" SetFocusOnError="True" ValidationGroup="1" 
         CssClass="error"></asp:RequiredFieldValidator>--%> 
       </div> 
      </div> 
      <div class="control-group"> 
       <label class="control-label" for="PositionName"> 
        Confirm Password:</label> 
       <div class="controls"> 
        <asp:TextBox ID="txtConfirmPassword" runat="server" TextMode="Password"></asp:TextBox> 
        <asp:RequiredFieldValidator ID="reqConPass" runat="server" ControlToValidate="txtConfirmPassword" 
         ErrorMessage="Please Enter Confirm Password" SetFocusOnError="True" ValidationGroup="1" 
         CssClass="error"></asp:RequiredFieldValidator> 
        <asp:CompareValidator ID="compPassword" runat="server" ControlToValidate="txtConfirmPassword" 
         ControlToCompare="txtPassword" ErrorMessage="Password Mismatch" SetFocusOnError="True" 
         ValidationGroup="1" CssClass="error"></asp:CompareValidator> 
       </div> 
      </div> 

Zasadniczo widać mam RequiredFieldValidator wykomentowane zarówno przepustkę i potwierdzenia przejazdu. Kiedy to zrobię, mogę przesłać tylko z wartością txtPassword textbox i nic w txtConfirmPassword textbox.

Jeśli odkomentuję numer RequiredFieldValidators, to zostanie on porównany tak, jak powinien.

Jeśli to pomaga, muszę to zrobić, ponieważ nie mogę odszyfrować hasła i automatycznie uzupełnić pole tekstowe aktualnym hasłem. Tak więc, gdy użytkownik jest edytowany, będzie musiał wprowadzić nowe hasło za każdym razem z RequiredFieldValidator na nim.

Więc moim rozwiązaniem było pozbyć się RequiredFieldValidator i po prostu sprawdzić, czy tekst jest pusty lub pusty, a jeśli tak, to nie aktualizuj hasła, ale jeśli tak nie jest, zaktualizuj użytkownika bez aktualizacji hasło.

Mam nadzieję, że to ma sens, a jeśli ktoś może pomóc, bardzo bym to docenił.

Jeśli potrzebujesz więcej informacji, zapytaj.

Jeszcze raz dziękuję!

+0

Tak, jest to zgodne z projektem. Możesz wykonać sprawdzanie po stronie serwera lub użyć niestandardowego weryfikatora. –

+0

To zadziałało idealnie. Skopiowałem twój kod bezpośrednio i nawet bez wymaganego weryfikatora hasła otrzymałem "Niezgodność haseł" - chociaż wykonałem PostBack w moim teście. – ahwm

+0

Hmm ciekawe, że zadziałało dla ciebie ahwm, nadal nie wydaje się, że mi się podoba. No cóż, przypuszczam, że wezmę radę Henk Holtermana i zrobię to po stronie serwera kontrolnego. Dzięki chłopaki! –

Odpowiedz

0

Zobacz ten fragment kodu, w tym pierwszym dla hasła użyłem Weryfikator wyrażenia regularnego i raz hasło jest poprawne, a następnie włączyłem walidator porównania.

<script> 
 
     function Validate() {    
 
      if (document.getElementById('<%=txtPassword.ClientID %>').value != "") 
 
       ValidatorEnable(document.getElementById('<%=ConfirmPasswordRequired.ClientID %>'), true); 
 
      else 
 
       ValidatorEnable(document.getElementById('<%=ConfirmPasswordRequired.ClientID %>'), false); 
 
     } 
 
    </script>
\t <p> 
 
       Password 
 
       <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox> 
 
       
 
       <asp:RegularExpressionValidator ID="PasswordRegularExpression" runat="server" 
 
        ErrorMessage="*Password must be at least 8 characters long and include at least one Special Character, one Number, and one Capital letter." 
 
        ValidationGroup="ValidationGroup1" ValidationExpression="^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).*$" 
 
        ControlToValidate="txtPassword" > 
 
       </asp:RegularExpressionValidator> 
 
      </p> 
 
      <p> 
 
\t \t \t \t Confirm Password: 
 
       <asp:TextBox ID="txtConfirmPassword" runat="server" TextMode="Password"></asp:TextBox> 
 
       <asp:RequiredFieldValidator ID="ConfirmPasswordRequired" runat="server" ControlToValidate="txtConfirmPassword" 
 
        ErrorMessage="*Confirm Password is required." 
 
        Enabled="false" ValidationGroup="ValidationGroup1"></asp:RequiredFieldValidator> 
 
       <asp:CompareValidator ID="NewPasswordCompare" runat="server" ControlToCompare="txtPassword" 
 
        ControlToValidate="txtConfirmPassword" ErrorMessage="*Confirm Password must match with the Password." 
 
        ValidationGroup="ValidationGroup1"></asp:CompareValidator> 
 
      </p> 
 
      <p> 
 
       <asp:Button ID="Button1" runat="server" Text="Save" ValidationGroup="ValidationGroup1" 
 
        OnClick="Button1_Click" OnClientClick="Validate();" /> 
 
      </p>

0

Oto jedna myśl, ja też skończyło się korzystania z tego rozwiązania:

Jak o ustawieniu walidator porównać do sprawdzania poprawności tekstowe hasło i porównać go do potwierdzenia. W ten sposób weryfikator porównania uruchamia się tylko wtedy, gdy w polu tekstowym hasła znajduje się wartość.

<div class="control-group"> 
    <label class="control-label" for="PositionName">Password:</label> 
    <div class="controls"> 
     <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"/>  
    </div> 
</div> 
<div class="control-group"> 
    <label class="control-label" for="PositionName">Confirm Password:</label> 
    <div class="controls"> 
     <asp:TextBox ID="txtConfirmPassword" runat="server" TextMode="Password"/>  
     <asp:CompareValidator ID="compPassword" runat="server" ControlToValidate="txtPassword" 
         ControlToCompare="txtConfirmPassword" ErrorMessage="Password Mismatch" SetFocusOnError="True" 
         ValidationGroup="1" CssClass="error"/> 
    </div> 
</div> 
Powiązane problemy