jquery.validate.unobtrusive: атрибут сравнения всегда терпит неудачу - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть два поля электронной почты в форме, чтобы подтвердить, что пользователь правильно ввел свою электронную почту. Однако jquery.validate.unobtrusive всегда показывает сообщение об ошибке, даже если электронное письмо введено дважды правильно.

Это проект ASP.Net MVC 3, и я использую атрибут сравнения во втором поле электронной почты.

Вот HTML-код этого региона на моей веб-странице:

<div class="editor-field">
    <input class="text-box single-line" data-val="true" data-val-length="The field Adresse de courriel must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="L&amp;#39;adresse de courriel doit &amp;#234;tre sp&amp;#233;cifi&amp;#233;e" id="Requerant_Individu_Courriel" name="Requerant.Individu.Courriel" type="text" value="" />
    <span class="field-validation-valid" data-valmsg-for="Requerant.Individu.Courriel" data-valmsg-replace="true"></span>
</div>
<div class="editor-field">
    <input class="text-box single-line" data-val="true" data-val-equalto="Les deux adresses de courriel doivent &amp;#234;tre identiques" data-val-equalto-other="*.Courriel" data-val-required="L&amp;#39;adresse courriel de confirmation doit &amp;#234;tre sp&amp;#233;cifi&amp;#233;e" id="Requerant_Individu_ConfirmCourriel" name="Requerant.Individu.ConfirmCourriel" type="text" value="" />
    <span class="field-validation-valid" data-valmsg-for="Requerant.Individu.ConfirmCourriel" data-valmsg-replace="true"></span>
</div>

Я заметил этот атрибут на втором входе электронной почты: data-val-equalto-other = "*. Courriel" Мне интересно, правильна ли эта звездочка.

А вот что у меня в модели:

    [Required(ErrorMessage = "L'adresse de courriel doit être spécifiée")]
    [StringLength(50)]
    [Display(Name = "Adresse de courriel")]
    public String Courriel { get; set; }

    [Compare("Courriel", ErrorMessage = "Les deux adresses de courriel doivent être identiques")]
    [Required(ErrorMessage = "L'adresse courriel de confirmation doit être spécifiée")]
    [Display(Name = "Retapez votre adresse de courriel")]
    public string ConfirmCourriel { get; set; }

Кто-нибудь когда-либо сталкивался с этой проблемой? Предложения?

Примечание: я использую jQuery 1.6.3 и плагин проверки jQuery 1.8.1

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Если вы используете свернутую версию, выполните поиск / замену:

Заменить:

f = a(b.form).find(":input[name=" + d + "]")[0];

С:

f=a(b.form).find(":input[name='"+d.replace(".","\\.").replace("[","\\[").replace("]","\\]")+"']")[0];

Также замените:

return a(b.form).find(":input[name='"+c+"']").val()

С:

return a(b.form).find(":input[name='"+c.replace(".","\\.").replace("[","\\[").replace("]","\\]")+"']").val()
1 голос
/ 09 сентября 2011

Я наконец нашел ответ на мою проблему в этом посте:

JQuery 1.5 перерывов Сравнить Проверить (JQuery Validate 1.8)

В файле jquery.validate.unobtrusive.js, строка 288:

element = $(options.form).find(":input[name=" + fullOtherName + "]")[0];

необходимо заменить следующим кодом:

element = $(options.form).find(":input[name='" + fullOtherName.replace(".", "\\.").replace("[", "\\[").replace("]", "\\]") + "']")[0];

То же самое для строки 309:

return $(options.form).find(":input[name='" + paramName + "']").val();

, который должен быть заменен на:

return $(options.form).find(":input[name='" + paramName.replace(".", "\\.").replace("[", "\\[").replace("]", "\\]") + "']").val();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...