asp.net-mvc-3 - MVC 3 客户端比较验证

标签 asp.net-mvc-3 jquery-validate

这里发生了一些奇怪的事情。

我有一个基本形式:

    <% using (Html.BeginForm())
       { %>
       <%: Html.LabelFor(model => model.user.email) %>
       <%: Html.TextBoxFor(model => model.user.email) %>
       <%: Html.ValidationMessageFor(model => model.user.email) %>
       <br />
       <%: Html.LabelFor(model => model.user.password) %>
       <%: Html.PasswordFor(model => model.user.password) %>
       <%: Html.ValidationMessageFor(model => model.user.password) %>
       <br />
       <%: Html.LabelFor(model => model.user.confirmPassword) %>
       <%: Html.PasswordFor(model => model.user.confirmPassword) %>
       <%: Html.ValidationMessageFor(model => model.user.confirmPassword) %>
       <br />
       <input type="submit" value="Submit" />
    <% } %>

头部有以下内容:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<link rel="Stylesheet" type="text/css" href="/Content/Site.css" />
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

ViewModel 是这样的:

public class RegisterViewModel
{
    public RegisterUser user { get; set; }
}

public class RegisterUser
{
    [Required]
    [Display(Name = "Email Address")]
    public string email { get; set; }

    [Required]
    [Display(Name = "Password")]
    public string password { get; set; }

    [Required]
    [Display(Name = "Confirm Password")]
    [Compare("password")]
    public string confirmPassword { get; set; }
}

password 和 confirmPassword 之间的比较验证总是说:
“确认密码”和“密码”不匹配。
即使我知道他们确实匹配

这是奇怪的部分:当我从 View 页面中删除第一个字段时,一切正常。

所以当它只是

<% using (Html.BeginForm())
   { %>
   <%: Html.LabelFor(model => model.user.password) %>
   <%: Html.PasswordFor(model => model.user.password) %>
   <%: Html.ValidationMessageFor(model => model.user.password) %>
   <br />
   <%: Html.LabelFor(model => model.user.confirmPassword) %>
   <%: Html.PasswordFor(model => model.user.confirmPassword) %>
   <%: Html.ValidationMessageFor(model => model.user.confirmPassword) %>
   <br />
   <input type="submit" value="Submit" />
<% } %>

一切都很完美。

有什么想法吗?

谢谢。

最佳答案

这是客户端验证脚本中的错误:jquery.validate.unobtrusive.js

在 ~284 行你会发现:

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

改成这样:

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

name 属性需要单引号。

关于asp.net-mvc-3 - MVC 3 客户端比较验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713872/

相关文章:

javascript - 如何在 jquery 验证器中显示 'looks good' 消息?

asp.net-mvc - RouteCollection 和路由表有什么区别

jquery - 如何检查用户是否输入了错误的html

jquery - 未捕获的类型错误 : Object [object Object] has no method validate

jquery - 覆盖 jQuery 验证 MVC4 中的默认设置

javascript - 使用 jQuery 验证具有通用规则的表单

jquery 验证 future 日期 addMethod();

vb.net - MVC 3 错误处理的正确编码示例

asp.net-mvc - 在 asp.net MVC 中保存/显示图像

asp.net-mvc - 如何开始在 asp.net mvc3 项目中使用 openID?