2011-08-17 12 views
5

Ecco il motivo per cui. Questo è il codice HTML generato:Il validatore di confronto è sempre attivo anche quando le password sono le stesse

<div> 
     <label for="RegisterModel_Password">Contrase&#241;a</label> 
     <input class="text-box single-line password" data-val="true" data-val-length="Su Contrase&amp;#241;a debe tener al menos 6 caracteres." data-val-length-max="100" data-val-length-min="6" data-val-required="Debe escribir su contrase&amp;#241;a" id="RegisterModel_Password" name="RegisterModel.Password" type="password" value="" /> 
     <span class="field-validation-valid" data-valmsg-for="RegisterModel.Password" data-valmsg-replace="true"></span> 

    </div> 

    <div> 
     <label for="RegisterModel_ConfirmPassword">Confirme Su Contrase&#241;a</label> 
     <input class="text-box single-line password" data-val="true" data-val-equalto="Sus contrase&amp;#241;as no son las mismas." data-val-equalto-other="*.Password" id="RegisterModel_ConfirmPassword" name="RegisterModel.ConfirmPassword" type="password" value="" /> 
     <span class="field-validation-valid" data-valmsg-for="RegisterModel.ConfirmPassword" data-valmsg-replace="true"></span> 
    </div> 

Avviso questo, nella casella Conferma password:

data-val-equalto-other="*.Password" 

Questo dovrebbe essere RegisterModel.Password, come sto cercando di indovinare il javascript si presenta come l'ingresso con il nome "RegisterModel .Password ", no?

Ecco il mio codice modello:

[Required(ErrorMessage = "Debe escribir su contraseña")] 
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)] 
[DataType(DataType.Password)] 
[Display(Name = "Contraseña")] 
public string Password { get; set; } 

[DataType(DataType.Password)] 
[Display(Name = "Confirme Su Contraseña")] 
[Compare("Password", ErrorMessage = "Sus contraseñas no son las mismas.")] 
public string ConfirmPassword { get; set; } 

Tutte le idee su perché questo sta accadendo?


appena creato una nuova applicazione MVC3 e questo è il modello:

[Required] 
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
[DataType(DataType.Password)] 
[Display(Name = "Password")] 
public string Password { get; set; } 

[DataType(DataType.Password)] 
[Display(Name = "Confirm password")] 
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
public string ConfirmPassword { get; set; } 

e la convalida funziona. L'unica differenza è che usano il modello direttamente nella vista, mentre sto passando un * View * Modello che contiene quel RegisterModel.

Il HTML di questo difetto di lavoro è diversa dalla mia però:

 <div class="editor-field"> 
      <input data-val="true" data-val-length="The Password must be at least 6 characters long." data-val-length-max="100" data-val-length-min="6" data-val-required="The Password field is required." id="Password" name="Password" type="password" /> 
      <span class="field-validation-valid" data-valmsg-for="Password" data-valmsg-replace="true"></span> 
     </div> 

     <div class="editor-label"> 
      <label for="ConfirmPassword">Confirm password</label> 
     </div> 
     <div class="editor-field"> 
      <input data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="*.Password" id="ConfirmPassword" name="ConfirmPassword" type="password" /> 
      <span class="field-validation-valid" data-valmsg-for="ConfirmPassword" data-valmsg-replace="true"></span> 
     </div> 
+0

appena confermato che questo causato da quello che sospettavo.Metto tutto in un singolo modello invece di un ViewModel (come dovrei fare correttamente), la lib di validazione jQuery fa il suo lavoro correttamente. Mi chiedo se questo è un bug? –

risposta

2

Ciao Ho avuto lo stesso problema di te. Ciò accade perché c'è un bug nel file javascript che esegue la convalida. Ecco la correzione che devi fare.

http://forums.asp.net/t/1716181.aspx/1

Non è così difficile da trovare in versione ridotta al minimo, che è quello che ho dovuto cambiare.

Saludos!

0

Ho avuto lo stesso problema e la risposta di cui sopra non lo ha risolto purtroppo per me. Ciò che ha risolto il problema è stato assicurarmi di aver applicato [Required] e [StringLength (.....] Atrributes in modo identico al campo password e conferma password. Ho anche dovuto applicare l'attributo Compare al campo Password, non a ConfirmPassword campo.

Così, con il modello di cui sopra,

[Required(ErrorMessage = "Debe escribir su contraseña")] 
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)] 
[DataType(DataType.Password)] 
[Display(Name = "Contraseña")] 
public string Password { get; set; } 

[DataType(DataType.Password)] 
[Display(Name = "Confirme Su Contraseña")] 
[Compare("Password", ErrorMessage = "Sus contraseñas no son las mismas.")] 
public string ConfirmPassword { get; set; } 

Diventa

[Required(ErrorMessage = "Debe escribir su contraseña")] 
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)] 
[DataType(DataType.Password)] 
[Display(Name = "Contraseña")] 
[Compare("ConfirmPassword", ErrorMessage = "Sus contraseñas no son las mismas.")] 
public string Password { get; set; } 

[Required(ErrorMessage = "Debe escribir su contraseña")] 
[StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)] 
[DataType(DataType.Password)] 
[Display(Name = "Confirme Su Contraseña")] 
public string ConfirmPassword { get; set; } 
0

Invece di usare

@Html.PasswordFor(m => m.RegisterModel.RegisterConfirmPassword) 
.210

cui uscite

<input data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="RegisterModel.RegisterPassword" id="RegisterModel_RegisterConfirmPassword" name="RegisterModel.RegisterConfirmPassword" type="password"> 

ho preso l'uscita di cui sopra e ha aggiunto apici intorno " 'RegisterModel.RegisterPassword'"

<input data-val="true" data-val-equalto="The password and confirmation password do not match." data-val-equalto-other="'RegisterModel.RegisterPassword'" id="RegisterModel_RegisterConfirmPassword" name="RegisterModel.RegisterConfirmPassword" type="password"> 
Problemi correlati