jquery.validate.unobtrusive:比较属性总是失败

发布于 2024-12-03 16:05:39 字数 2044 浏览 0 评论 0原文

我的表单上有两个电子邮件字段,用于验证用户是否正确输入了电子邮件。但是,即使正确输入了两次电子邮件,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

I have two email fields on a form to validate that the user entered his email properly. However, jquery.validate.unobtrusive always shows an error message even when the email is entered twice correctly.

This is an ASP.Net MVC 3 project, and I am using the Compare Attribute on the second email field.

Here is the html code of that region on my web page:

<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&#39;adresse de courriel doit &#234;tre sp&#233;cifi&#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 &#234;tre identiques" data-val-equalto-other="*.Courriel" data-val-required="L&#39;adresse courriel de confirmation doit &#234;tre sp&#233;cifi&#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>

I noticed this attribute on the second email input: data-val-equalto-other="*.Courriel"
I am wondering whether that asterisk is correct.

And here is what I have in my model:

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

Anyone has ever encountered that problem? Suggestions?

Note: I am using jQuery 1.6.3 and jQuery Validation Plugin 1.8.1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羁客 2024-12-10 16:05:39

如果您使用的是最小化版本,请执行搜索/替换:

替换:

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

If you're using the minimized version, do a search/replace:

Replace:

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

With:

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

Also, replace:

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

With:

return a(b.form).find(":input[name='"+c.replace(".","\\.").replace("[","\\[").replace("]","\\]")+"']").val()
离线来电— 2024-12-10 16:05:39

我终于在这篇文章中找到了问题的答案:

JQuery 1.5 中断 Compare Validate (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();

I finally found the answer to my problem on this post:

JQuery 1.5 breaks Compare Validate (JQuery Validate 1.8)

In file jquery.validate.unobtrusive.js, line 288:

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

has to be replaced with this code:

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

Same thing for line 309:

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

which has to be replaced by:

return $(options.form).find(":input[name='" + paramName.replace(".", "\\.").replace("[", "\\[").replace("]", "\\]") + "']").val();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文