如何获取ASP.NET MVC ModelState.IsValid()来获取我对模型所做的更改

时间:2012-08-18 05:06:32

标签: asp.net-mvc entity-framework-4 asp.net-mvc-4

我的控制器中有一个自动生成的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);
        }

基本上它的说密码为空。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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