2011-09-12 13 views
30

新しい管理者を私のプロジェクトに追加しました。かなり大きくなるようになったので、構造化しておきたいと思います。MVC領域とRenderActionを別のコントローラで管理するにはどうすればよいですか?

共有レイアウトページにメニューと一部のユーザー情報を含むように設定する_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()アカウントのコントローラはビ​​ューのスコープ内にあるので、上記のように正常に機能しますが、管理者エリアではこのコントローラのスコープがないようです。

この問題を解決する方法はありますか?

答えて

53

あなたはRenderActionはあなたの場合には第三のパラメータとして取るRouteValueDictionary(またはルート値のちょうどオブジェクト)の一部として、領域を指定することができる:

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

これは、アカウント・コントローラがルートであると仮定されていますエリア。

関連する問題