重新评估ModelState.IsValid属性

Ste*_*eve 6 validation asp.net-mvc

我正在尝试验证用户更改其密码.此actionresult采用的PasswordChange类有4个属性.其中一个是databasePassword,它与"CurrentPassword"属性进行比较,确保用户只有在知道当前密码时才能更改密码(在网站上非常标准)

我遇到的问题是数据库密码只在ActionResult中设置(如图所示),但是ModelState似乎在此之前被调用,所以它在"IsValid"上返回false,因为它甚至在数据库密码为组

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult ChangePassword(PasswordChange model)
    {
        var User = GetPlayer().User;
        model.databasePassword = User.Password; 

        if (ModelState.IsValid)
        {
            //update the users password
            User.Updated = SystemDate.Current();
            User.Password = model.newPassword.ToLower();

            return Redirect("/Player");
        }
        else
        {
            return View(model);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能重新评估或评估我想要的时间!

Der*_*tie 1

创建一个PasswordChangeInput视图模型类并从视图中传递您需要的内容,然后您可以从实体模型中进行单独的验证。然后,在您满意输入数据有效后,您可以使用自动映射器之类的工具将输入视图模型映射到实体模型。

添加:您可以尝试清除 ModelState 错误,设置数据库密码,然后重新验证。找出导致默认模型绑定程序为databasePassword 添加错误并更改它以使其不会出现错误的原因可能更容易。