2011-08-17 14 views
5

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&#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> 

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> 
+0

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? –

Respuesta

2

Hola tenían el mismo problema que tú. Esto sucede porque hay un error en el archivo javascript que realiza la validación. Aquí está la solución que tienes que hacer.

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

No es tan difícil de encontrar en la versión minimizada, que es lo que tenía que cambiar.

Saludos!

0

Tuve el mismo problema y la respuesta anterior no me solucionó por desgracia. Lo que sí lo solucionó fue asegurarme de haber aplicado los atributos [Requerido] y [StringLength (.....] de forma idéntica tanto a la contraseña como a la contraseña. También tuve que aplicar el atributo Comparar al campo Contraseña, no a la Contraseña de confirmación campo.

Así, con el modelo anterior,

[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; } 

Se convierte en

[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

en lugar de utilizar

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

que da salida a

<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"> 

Tomé la salida de los anteriores y añadió comillas simples " '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"> 
Cuestiones relacionadas