ModelState.IsValid is false after Jquery Validation is true



我正在尝试创建一个简单的创建用户页面,该页面包含用户详细信息和确认密码字段。

我有一个用户视图模型和一个用户类:

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")]

相关内容

最新更新