1

我的控制器中有一个自动生成的 Create 操作,我做了一些改动,我必须在调用 ModelState.IsValid() 之前修改提交的模型。

但是 IsValid() 仍然说它失败了,我认为这是因为它关闭了接收到的参数,并且忽略了我所做的更改?更改内容后如何验证它?

谢谢

控制器代码:

[HttpPost]
        [CaptchaValidator]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Register(User user, bool captchaValid)
        {
            user.prepareUserForCreation();
            if (ModelState.IsValid && captchaValid)
            {
                db.Users.Add(user);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewData["captchaValidationMessage"] = captchaValid ? "" : "Your words didn't match, please try again";

            return View(user);
        }

准备方法:

public void prepareUserForCreation()
        {
            this.DateCreated = DateTime.Now;
            this.LastSeen = DateTime.Now; //TODO remove this
            this.IsActivated = true; //TODO remove this
        SecurityHelper.HashPassword(this);
        }

基本上它说的密码是空的。

4

2 回答 2

3

您必须ModelState.Clear();在使用 prepare 方法之前使用,然后调用TryValidateModel(user)以验证它

于 2012-08-18T14:14:54.053 回答
1

而不是使用ModelState.IsValid,尝试使用TryValidateModel(user)。我相信这将在您准备好模型后手动执行模型验证。

于 2012-08-18T05:47:22.500 回答