比较(密码)属性

Kra*_*ras 18 passwords data-annotations asp.net-mvc-3

我想使用下面的代码为新用户创建一个视图模型."User"类只包含我将持久保存到数据库的两个属性(现在简化); 视图模型添加"比较密码"字段,该字段仅在视图中使用.我更喜欢让视图模型直接使用"User"类,而不是重复"User"中定义的所有字段.

我的问题是如何在"ComparePassword"字段的[Compare]属性中正确引用"User.Password"?

public class User
{
   [Required]
   public string UserName { get; set; }

   [Required]
   [DisplayName("Password")]
   [DataType(DataType.Password)]
   public string Password { get; set; }
}
public class NewUserViewModel
{
    public User User { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [DisplayName("Re-enter Password")]
    [Compare("Password", ErrorMessage="Passwords must match")]
    public string ComparePassword { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

为"密码"和"ComparePassword"生成的HTML如下所示.

<input class="text-box single-line password" 
  data-val="true" 
  data-val-required="The Password field is required." 
  id="User_Password" 
  name="User.Password" 
  type="password" value="" />

<input class="text-box single-line password" 
  data-val="true" 
  data-val-equalto="Passwords must match" 
  data-val-equalto-other="*.Password"
  data-val-required="The Re-enter Password field is required." 
  id="ComparePassword" 
  name="ComparePassword" 
  type="password" value="" />
Run Code Online (Sandbox Code Playgroud)

关键是如何通过Javascript处理" data-val-equalto-other ".如果我使用" 密码 "或" User_Password "没有任何反应 - 不执行检查.如果我使用" User.Password ",则执行检查但始终失败.

我在jQuery中直接这样做没有真正的问题,但是如果可能的话,我更愿意使用[Compare]属性.

Pet*_*ter 15

刚通过StackOverflow和Microsoft Connect找到答案:

看到:

http://connect.microsoft.com/VisualStudio/feedback/details/665793/jquery-unobtrusive-validate-equalto-fails-with-compare-attributeJQuery 1.5中断比较验证(JQuery Validate 1.8)

总而言之,它看起来像MVC3附带的jquery.validate.unobtrusive文件中的一个错误.解决方法是更改​​jquery.validate.unobtrusive文件中的以下行.

element = $(options.form).find(":input[name=" + fullOtherName + "]")[0];
Run Code Online (Sandbox Code Playgroud)

element = $(options.form).find(":input[name=" + fullOtherName.replace(".", "\\.") + "]")[0];
Run Code Online (Sandbox Code Playgroud)

在Microsoft Connect上,它说MS修复了它,但我找不到新版本的链接.无论如何,这对我来说同时也适用.希望能帮助到你

  • 嗨彼得 - 我试过你的修复,但它对我不起作用. (2认同)