2011-06-18 2 views
18

内から現在のコントローラー&アクションを取得する:これは完璧に動作私はasp.netのMVC3に現在のコントローラとアクションを取得するには、以下の使用している部分図

var currentAction = routeData.GetRequiredString("action"); 
var currentController = routeData.GetRequiredString("controller"); 

。しかし、レイアウトから呼び出された部分ビューの中からこれを呼び出すと、現在のコントローラとして「レイアウト」が返されます。これはもちろん正しい動作ですが、親コントローラの名前にアクセスする方法はありますか?

編集さらに明確化のために:

私は_Layout.cshtmlの中から私のメニューコントローラと部分図を呼び出しています:

@Html.Action("Menu", "Layout") 

そして、部分図そのメニューの中から、私が呼び出しています現在のアクションとコントローラを返すコード。

+0

として部分図で行うことができます。あなたはこの部分的にどのように呼んでいるのかを示すことができますか? –

+0

@ darin-dimitrov私はいくつかのさらなる情報で私のポストを更新しました。これはまったく役に立ちますか? – Jonathan

+0

はい、助けても、あなたは答えを得ます:-) –

答えて

43

質問を更新してコードを表示した後、部分的な見解は表示されません。あなたは子供の行動を呼びます。 Html.PartialHtml.Actionの間には大きな違いがあります。あなたはこれを行うことができ、この子アクション内の親コンテキストを取得したいのであれば:

public ActionResult Menu() 
{ 
    var rd = ControllerContext.ParentActionViewContext.RouteData; 
    var currentAction = rd.GetRequiredString("action"); 
    var currentController = rd.GetRequiredString("controller"); 
    ... 
    return View(); 
} 
+2

Spot on。ありがとうダーリン - フォームからMVCへの切り替えはかなり大きなジャンプですが、あなたのような人々は少し簡単に移行を行っています! – Jonathan

37

私は部分的な

@Html.Partial("Paging") 
を使用してコールした後、親のコントローラ名にアクセスする方法を探して、このページにつまずきました

これは、あなたの質問は非常に明確ではありません

@{ 
    var controller = ViewContext.RouteData.GetRequiredString("controller"); 
    var action = ViewContext.RouteData.GetRequiredString("action"); 
} 
+2

あなたは私の一日を作った! :) –

関連する問題