私の要件では、すべてのビューは、コントローラーのアクション内で何が起こったかに基づいて通知を表示できる必要があります。現状の実装は、通知を表示する必要があるすべてのモデルによって継承される BaseModel にあります。次に、この要件を持つビューは次のように呼び出します。
@{ Html.RenderPartial("MessageCtrl", Model); }
そして、通知が表示されます。これは、アクションがビューを直接返す場合にうまく機能し、通常、アクションでは次のように処理されます。
model.SetMessage(response);
return View(model);
...ここで、SetMessage は、サービスから返されたオブジェクトからモデルの通知関連のプロパティを更新します。すべての応答は、私が作成した IResponse と呼ばれるインターフェイスを実装しているため、メッセージングを全体で処理できます。
別のアクションからビューを返し、それでも通知を表示する必要がある場合に問題が発生します。
たとえば、私の EditUser アクションでは、編集が成功した場合、Index ビューを表示したいと考えています。EditUser アクションからこれを実現するには、RedirectToAction を返す必要があります (単にビューを返すと、正しくない場合に EditUser であることを示す誤った URL を持つ正しいビューが返されるため)。ただし、RedirectToAction はモデルと BaseModel のすべての概念を失うため、リダイレクトするまでに通知が失われます。RouteValues を使用できることはわかっていますが、それでは共通の基本モデル主導の通知アプローチを持つという目的が無効になります。ViewBag も調べました (通常、MVC の醜い部分として却下します) が、ViewBag は単一の要求の存続期間中のみ存続し、RedirectToAction を使用すると、ViewBag がターゲットに到達するまでに再び空になることがわかりました。アクション。もう1つの考えは、セッションオブジェクトに保存することでした.
これはかなり標準的な要件のようです。RedirectToAction を介してクエリ文字列を介して別のビューに共通のデータ (通知など) を渡すための標準化されたアプローチはありますか?