web-dev-qa-db-ja.com

異なるコントローラーでMVCエリアとRenderActionを管理するにはどうすればよいですか?

プロジェクトが非常に大きくなり始めたので、プロジェクトに新しい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()は、アカウントコントローラーがビューのスコープ内にあるため正常に機能しますが、管理領域では、このコントローラーのスコープがないようです。

この問題を回避する方法はありますか?

32
jaffa

RenderActionが3番目のパラメーターとして受け取るRouteValueDictionary(または単にルート値のオブジェクト)の一部としてエリアを指定できます。

Html.RenderAction("UserInfo", "Account", new { area = "" });  

これは、アカウントコントローラーがルートエリアにあることを前提としています。

58
Richard Dalton

@ Html.Actionを使用して、必要に応じてパラメーター値を渡すことにより、部分ビューをレンダリングできます。

@Html.Action("ActionName", "ControolerName", new { firstParam = "a", SecondParam = "b",.... })
0
Sheriff