プロジェクトが非常に大きくなり始めたので、プロジェクトに新しいAdmin領域を追加しましたが、構造化したままにしておきたいと思います。
_ViewStart.cshtmlビューがあり、共有レイアウトページを設定して、メニューと一部のユーザー情報を含むパーシャルを含めています。これは私のエリアページに追加されていなかったので、_ViewStartファイルも自分のエリアに追加しました。
このファイルは、レイアウトを「〜/ Views/Shared/_Layout.cshtml」に設定します。これは、私の管理領域の外にあります。ただし、_LayoutファイルにはRenderAction()メソッドが含まれており、レンダリングのためにコントローラーの子アクションメソッドを呼び出します。問題は、その領域にこのコントローラーの可視性がないように見えるため、次の例外がスローされることです。
The controller for path '/Admin/LeadOrigin' was not found or does not implement IController.
しかし、それが発生したポイントはここにあります:
Line 70: <div id="logindisplay">
Line 71: @{
Line 72: Html.RenderAction("UserInfo", "Account");
Line 73: }
Line 74: </div>
上記のRenderAction()は、アカウントコントローラーがビューのスコープ内にあるため正常に機能しますが、管理領域では、このコントローラーのスコープがないようです。
この問題を回避する方法はありますか?
RenderActionが3番目のパラメーターとして受け取るRouteValueDictionary(または単にルート値のオブジェクト)の一部としてエリアを指定できます。
Html.RenderAction("UserInfo", "Account", new { area = "" });
これは、アカウントコントローラーがルートエリアにあることを前提としています。
@ Html.Actionを使用して、必要に応じてパラメーター値を渡すことにより、部分ビューをレンダリングできます。
@Html.Action("ActionName", "ControolerName", new { firstParam = "a", SecondParam = "b",.... })