【发布时间】:2011-07-25 15:31:17
【问题描述】:
我想使用下面的代码为新用户创建一个视图模型。 “用户”类仅包含我将持久保存到数据库的两个属性(现在已简化);视图模型添加了一个“比较密码”字段,该字段仅在视图中使用。我宁愿让视图模型直接使用“用户”类,而不是重复“用户”中定义的所有字段。
我的问题是如何在“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; }
}
为“密码”和“比较密码”生成的 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="" />
关键是Javascript如何处理“data-val-equalto-other”。如果我使用“Password”或“User_Password”没有任何反应 - 不执行任何检查。如果我使用“User.Password”,则会执行检查但总是失败。
直接在 jQuery 中执行此操作没有真正的问题,但如果可能的话,我更愿意使用 [Compare] 属性。
【问题讨论】:
-
我遇到了完全相同的问题(我正在使用 FluentValidation,尽管问题似乎相同)。运气好吗?
-
我正在做同样的事情,这对我不起作用。它说“[ViewModel].User.Password”不存在,并在表单显示之前引发运行时错误。我有一个视图模型,其中用户作为属性,密码作为其下方的字符串属性。有什么想法吗?
标签: asp.net-mvc-3 passwords data-annotations