コントローラーのアクションから、MVC フレームワークを介してコントローラーが存在する領域を特定する方法を知りたいです (つまり、特定の領域内のすべてのコントローラーをその情報を持つベースコントローラーから継承させずに)。
私が特に興味を持っているのは、子アクション (RenderAction を介してレンダリングされるコントローラー アクション) の場合です。たとえば、呼び出し側の親コントローラーの領域です。
ASP .NET MVC 2.0 RTM を使用しています
コントローラーのアクションから、MVC フレームワークを介してコントローラーが存在する領域を特定する方法を知りたいです (つまり、特定の領域内のすべてのコントローラーをその情報を持つベースコントローラーから継承させずに)。
私が特に興味を持っているのは、子アクション (RenderAction を介してレンダリングされるコントローラー アクション) の場合です。たとえば、呼び出し側の親コントローラーの領域です。
ASP .NET MVC 2.0 RTM を使用しています
RouteData
のメンバーである辞書から取得できますControllerContext
。
あなたのコントローラメソッドで(これはテスト済みのコードです):
string area = this.DataContext.RouteData.DataTokens["Area"].ToString();
私が使用しているルートは次のようになります。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"MyRoute",
MyArea/{controller}/{action}/{id},
new {controller = "MyController", Action="Index" }
);
}
私のエリア ルートはルート ルート (global.asax 内) よりも具体的であるため、最初にエリア ルートを登録していることに注意してください。
Phil Haack のルート デバッガーを使用してルートをチェックし、URL が正しいルートに到達していることを確認してください。