我正在尝试创建一个简单的创建用户页面,该页面包含用户详细信息和确认密码字段。
我有一个用户视图模型和一个用户类:
public class UserViewModel
{
public User AccountUser { get; set; }
[Required]
[Compare("AccountUser.Password")]
public string ConfirmPassword { get; set; }
}
[DisplayName("User Account")]
public class User
{
[Required]
[DisplayName("Username")]
public string Username { get; set; }
[Required]
[DisplayName("Password")]
public string Password { get; set; }
}
当在两个密码字段中输入不匹配的数据时,jQuery将成功地告诉我密码字段不匹配,并且提交按钮不会返回到我的控制器。
但是,如果我匹配这两个字段,jQuery将通过验证,提交查询将返回到控制器。此时,我的ModelState.IsValid
被检查,它返回false,并在Password属性的错误上引用"找不到属性AccountUser.Password"。
我理解关注点分离模式,但我正在努力理解为什么此代码不起作用。
有人能解释为什么在没有显示jquery验证消息后,modelstate返回false吗?
这可能与您的post-back有关,因此您的客户端验证正在工作,但数据没有完全返回到您的控制器。
在控制器中放置一些断点,并检查它是否为ViewModel中的用户返回空值。
我认为您只能像[Compare("PropertyName")]
一样使用Compare
属性,而不能使用[Compare("Object.PropertyName")]
——正如错误所说:... cannot find the property Account.Password ...
。
您应该更改您的模型和属性,如[Compare("Password")]