yu_ominae
yu_ominae

Reputation: 2933

How to reset ModelState values?

I am checking a model for validity in an action. The repository throws various exceptions depending on how the checks I carry out go, so the action contains a try-catch statement.

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

The view model contains some sensitive information, so if the checks fail I would like to return to the view and remove the values which were input by the user.

To complicate things in my view I call actually has two partial views in it that show a form each, so like:

@model MyProject.MyOverallViewModel
@{
}

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

I have tried doing Model = new Model() in the catch, but, even though the model passed to the view is all null, the values entered to the form are persisted. I assume this is because of ModelState... Is there a way to reset that?

I would like to avoid doing a RedirectToAction so that I can persist the result of my check within my model when the view is displayed again.

Any ideas?

Upvotes: 4

Views: 10234

Answers (1)

Darin Dimitrov
Darin Dimitrov

Reputation: 1039298

ModelState.Clear(); should do the job.

Upvotes: 10

Related Questions