2011-06-18 56 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

點上。謝謝達林 - 從Forms轉換到MVC是一個相當大的跳躍,但像你這樣的人正在讓轉換變得容易一些! – Jonathan

37

我偶然發現這個網頁上尋找一種方式,一個電話後訪問父控制器名偏

@Html.Partial("Paging") 

這可以在局部視圖來完成的

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

你讓我的一天! :) –

相關問題