Jquery Validation为true后,ModelState.IsValid为false

时间:2013-08-07 01:20:11

标签: jquery asp.net-mvc-4 razor jquery-validate unobtrusive-validation

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

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

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,引用“找不到属性AccountUser.Password”。

我理解关注模式的分离,但是我试图理解为什么这段代码不起作用。

有人可以解释为什么在没有显示jquery验证消息后,modelstate返回false吗?

2 个答案:

答案 0 :(得分:0)

这可能与您的回发有关,因此您的客户端验证工作正常,但数据未完全返回到您的控制器。

在控制器中放置一些断点,并检查它是否在ViewModel中为用户返回空值。

答案 1 :(得分:0)

我认为您只能使用Compare之类的[Compare("PropertyName")]属性,而不是[Compare("Object.PropertyName")] - 因为错误显示为:... cannot find the property Account.Password ...

您应该更改模型和属性,例如[Compare("Password")]