如何重置ModelState值?

问题描述:

我正在检查动作中的有效性模型。取决于我执行的检查的方式,存储库会抛出各种异常,因此该操作包含try-catch语句。如何重置ModelState值?

[AcceptVerb(HttpVerbs.Post)] 
public ActionResult MyAction1(Action1Model Model) 
{ 
    if (ModelState.IsValid) 
     try 
     { 
      new MyModelRepository().CarryOutSomeChecks(Model); 
      return View("SuccessfulView") 
     } 
     catch (ValidationException) 
     { 
      Model.Result = Result.Fail; 
      ModelState.... <= I would like to reset the ModelState here. 
     } 
    return View(Model) 
} 

视图模型包含一些敏感信息,因此,如果检查失败,我想返回到视图和去除是由所述用户输入的值。

要在我看来,我称之为复杂的事情其实有它,显示每一种形式两个部分意见,所以这样的:

@model MyProject.MyOverallViewModel 
@{ 
} 

@{Html.RenderPartial("MyAction1Form", Model.Action1ModelInstance);} 
@{Html.RenderPartial("MyAction2Form", Model.Action2ModelInstance);} 

我试图做模型=新模式()在catch,但即使传递给视图的模型全为空,输入到表单的值也会保留。我认为这是因为ModelState ...有没有办法重置它?

我想避免做一个RedirectToAction,这样我可以保持我的检查结果在我的模型中,当视图再次显示时。

任何想法?

ModelState.Clear();应该完成这项工作。

+0

是的,你是对的,它的确如此。奇怪的是,我在大约半小时前尝试过,价值观被坚持......必须越来越累。谢谢! –

+0

只是为了澄清,ModelState.Clear()的作品,但只有当我然后通过模型并重置所有属性。有趣的是,现在有意义地考虑它...... –

+2

@ user643192,而不是通过你的模型并逐个重置它的属性,你可以简单地在重置模型状态之后返回View(new Action1Model()); –