2012-01-26 11 views
2

私はアクション内でモデルの正当性をチェックしています。リポジトリは、実行するチェックがどのように実行されるかに応じてさまざまな例外をスローします。そのため、アクションには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);} 

が、ビューに渡されたモデルがすべてnullであっても、フォームに入力された値は永続化されます。私はこれがModelStateのためだと仮定します...それをリセットする方法はありますか?

RedirectToActionを実行しないようにして、ビューが再び表示されたときにモデル内でチェック結果を保持できるようにしたいと思います。

アイデア?

答えて

7

ModelState.Clear();を実行してください。

+0

はい、そうです。奇妙なことに、私は30分ほど前にそれを試みましたが、その価値は残っていました...疲れているはずです。ありがとう! –

+0

ModelState.Clear()は機能しますが、モデルを調べてすべてのプロパティをリセットした場合にのみ、モデル状態がクリアされます。あなたは今モデルについて考えています... –

+2

@ user643192あなたのモデルを通過してプロパティを1つずつリセットするのではなく、モデルステートをリセットした直後に単にView(new Action1Model());を返すことができます。 –

関連する問題