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);
        }

基本的に、パスワードは null です。

4

2 に答える 2

3

ModelState.Clear();準備メソッドを使用する前に使用し、それTryValidateModel(user)を検証するために呼び出す必要があります

于 2012-08-18T14:14:54.053 に答える
1

を使用するのではなく、を使用してModelState.IsValidみてくださいTryValidateModel(user)。モデルを準備した後、これによりモデルの検証が手動で実行されると思います。

于 2012-08-18T05:47:22.500 に答える