He aquí el motivo. Este es el código HTML generado:Comparar el validador siempre se dispara incluso cuando las contraseñas son las mismas
<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>
cuenta de esto, en el cuadro de confirmación de contraseña:
data-val-equalto-other="*.Password"
Ésta debe ser RegisterModel.Password
, como yo supongo que el código JavaScript se parece a la entrada con el nombre de "RegisterModel .Contraseña ", ¿no?
Aquí está mi código de modelo:
[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; }
¿Alguna idea sobre por qué ocurre esto?
acaba de crear una nueva aplicación MVC3 marca y este es el modelo:
[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; }
y trabaja la validación. La única diferencia aquí es que usan el modelo directamente en la vista, mientras que yo estoy pasando un * Ver * Modelo que contiene ese RegisterModel.
El HTML de este defecto de trabajo es diferente a la mía sin embargo:
<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>
acaba de confirmar que esta causado por lo que sospechaba.Muevo todo en un único modelo en lugar de un ViewModel (como debería hacerlo correctamente), la lib de jQuery validation hace su trabajo correctamente. Me pregunto si esto es un error? –