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ña</label>
<input class="text-box single-line password" data-val="true" data-val-length="Su Contrase&#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&#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ña</label>
<input class="text-box single-line password" data-val="true" data-val-equalto="Sus contrase&#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>
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? –