2015-05-21 5 views
5

Quindi ho cercato dappertutto e non riesco a trovare un problema simile.CompareValidator senza RequiredFieldValidator?

In pratica, sembra che l'utilizzo di CompareValidator non funzioni senza 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> 

In sostanza, si può vedere ho la RequiredFieldValidator commentata sia per passare e confermare passaggio. Quando eseguo questa operazione, posso inviare solo un valore nello txtPassword textbox e nulla nello txtConfirmPassword textbox.

Se si annulla il valore di RequiredFieldValidators, esso viene confrontato come dovrebbe.

Se è utile, il motivo per cui devo farlo è perché non riesco a decodificare la password e riempire automaticamente la casella di testo con la password corrente. Quindi ogni volta che un utente viene editato, dovrà inserire una nuova password ogni volta con uno RequiredFieldValidator su di esso.

Quindi la mia soluzione era sbarazzarsi dello RequiredFieldValidator e controllare solo se il testo è nullo o vuoto, e se lo è, non aggiornare la password, ma se non lo è, aggiorna l'utente senza aggiornare il parola d'ordine.

Spero che abbia senso, e se qualcuno può aiutare lo apprezzerei molto.

Se avete bisogno di maggiori informazioni si prega di chiedere.

Grazie ancora!

+0

Sì, questo è di progettazione. È possibile eseguire il confronto sul lato server o utilizzare un validatore personalizzato. –

+0

Questo ha funzionato perfettamente per me. Ho copiato il tuo codice direttamente e anche senza il validatore richiesto sulla password mi è stato dato "Password Mismatch" - sebbene abbia eseguito un PostBack nel mio test. – ahwm

+0

Hmm interessante per il fatto che ha funzionato per te, ahwm, a me non sembra che piaccia. Vabbè, suppongo che prenderò i consigli di Henk Holterman e controllerò il lato server. Grazie ragazzi! –

risposta

0

Vedere questo snippet di codice, in questo primo per la password ho usato il validatore di espressioni regolari e una volta che la password è valida, ho abilitato il validatore di confronto.

<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

Ecco un pensiero, ho anche finito per usare questa soluzione:

Come sull'impostazione del validatore confrontare per convalidare la casella di testo password e confrontarlo con la conferma. In questo modo, il validatore di confronto viene attivato solo se è presente un valore all'interno della casella di testo della password.

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