Проверка валидатора всегда срабатывает, даже если пароли одинаковые - PullRequest
5 голосов
/ 18 августа 2011

Вот причина, почему.Это сгенерированный HTML:

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

Обратите внимание на это в поле подтверждения пароля:

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

Это должно быть RegisterModel.Password, так как я предполагаю, что javascript выглядит какввод с именем «RegisterModel.Password», нет?

Вот мой код модели:

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

Есть идеи, почему это происходит?


Только что создали новое приложение MVC3, и это модель:

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

И проверка работает.Единственная разница здесь в том, что они используют модель непосредственно в представлении, тогда как я передаю * Представление * Модель, которая содержит эту RegisterModel.

HTML-код этого рабочего значения по умолчаниюотличается от моего, хотя:

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

Ответы [ 3 ]

2 голосов
/ 16 сентября 2011

Здравствуйте, у меня была такая же проблема, как у вас. Это происходит из-за ошибки в файле javascript, который выполняет проверку. Вот исправление, которое вы должны сделать.

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

Это не так сложно найти в свернутой версии, которую я должен был изменить.

Saludos!

0 голосов
/ 28 января 2014

Вместо использования

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

который выводит

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

Я взял вывод выше и добавил одинарные кавычки вокруг "'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">
0 голосов
/ 09 ноября 2012

У меня была та же проблема, и приведенный выше ответ не решил ее для меня, к сожалению. Что исправило, так это то, что я применил атрибуты [Required] и [StringLength (.....] к полю пароля и к паролю подтверждения одинаково. Мне также пришлось применить атрибут Compare к полю Password, а не к ConfirmPassword поле.

Итак, с моделью выше,

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

Становится

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