无法使TryValidateModel()工作

时间:2018-03-25 22:05:29

标签: asp.net-core-mvc asp.net-core-2.0 modelstate validationattribute

我有一个注册操作,尝试检查模型状态是否有效,尝试登录,如果失败则重新验证模型。我无法使用TryValidateModel重新验证模型。我修改了一些函数来强制模型无效。

以下是我的注册动作:

[HttpPost]
public IActionResult SignUp(SignUpModel signUp, string returnURL)
{
    if (ModelState.IsValid)
    {
        if (loginManager.SignUp(signUp)) return Ok("Account created");
        TryValidateModel(signUp); // breakpoint 1
    }
    return View(signUp); // breakpoint 3
}

这是强制无效状态的SignUp()函数:

public bool SignUp(SignUpModel signUp)
{
    signUp.ForceInvalid();
    return false;
}

这是SignUpModel

中的强制功能
   internal void ForceInvalid() => Validation.IsDuplicateEmail = true;

这是我用于电子邮件的验证属性类:

class EmailExistsAttribute : ValidationAttribute
{

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (validationContext.ObjectInstance is SignUpModel signUp && signUp.Validation.IsDuplicateEmail)
            new ValidationResult("Email already exists"); // breakpoint 2
        return ValidationResult.Success;
    }

}

我使用过这样的属性:

[EmailExists]
public string Email { get; set; }

代码在断点处按顺序中断:1 2 3.由于代码在2处中断,因此模型状态应该无效。但是在断点3处,ModelState.IsValid仍为真,并且没有错误。我甚至试过ModelState.Clear(),尽管在这种情况下没有意义。输出仍然相同。

0 个答案:

没有答案