我的控制器中有一个自动生成的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);
}
基本上它的说密码为空。
答案 0 :(得分:3)
在使用prepare方法之前必须使用ModelState.Clear();
,然后调用TryValidateModel(user)
进行验证
答案 1 :(得分:1)
请尝试使用ModelState.IsValid
,而不是使用TryValidateModel(user)
。我相信这会在您准备好之后手动执行模型的验证。