2017-08-03 83 views
1

我是ASP.NET Core中的新成員。我有一個導航菜單,我想跟蹤活動項目。 我的想法是用行動和控制器的名稱作爲導航鍵:ASP.NET Core:跟蹤當前活動頁面,或如何在視圖中獲取控制器和操作名稱

enter image description here

問題是我不知道如何在_Layout.cshtml視圖獲取的動作和控制器的名稱...

我已經試過ViewContext.ActionDescriptor.DisplayName但它呈現這樣的事情MyApp.Controllers.RecordsController.Index (MyApp)

我寧願更喜歡得到這樣的事情:

<script>$("li#@(Controller.Name)[email protected](Action.Name)")).addClass("active");</script> 

回答

4

使用

var controller = ViewContext.RouteData.Values["Controller"]; 
var action = ViewContext.RouteData.Values["Action"]; 

<script> 
$("li#@(ViewContext.RouteData.Values["Controller"])[email protected](ViewContext.RouteData.Values["Action"])")).addClass("active"); 
</script> 

PS:如果需要

ViewContext.RouteData.Values["Action"].ToString().ToLower(); 

您也可以通過風格的塊激活菜單 使用ToLower將()

<style> 
li#@(ViewContext.RouteData.Values["Controller"])[email protected](ViewContext.RouteData.Values["Action"]) { 
//add some style 
} 
</style> 
1

你可以做到這一點服務器端,如果你結合this answer與foll虧欠的。

某處在您的視圖中。

@{ 
    var rv = ViewContext.RouteData.Values; 
    var id = $"{rv["Controller"]}-{rv["Action"]}".ToLowerInvariant(); 
} 

對每個<li>

<li class-conditional-active="@(id == "records-index")">...</li> 
+0

有沒有這樣的事情ControllerName和ActionName ......在ActionDescriptor ...我會用它 – Serge

+0

你說得對。我正在VSCode中檢查,顯示的是屬性,但沒有公開。 @ itikhomi的回答是正確的。我仍然會質疑使用JavaScript來做到這一點。 – benembery

+0

@benembery,在腳本/樣式塊中設置活動菜單樣式比在服務器代碼中切換多個要好。你可以在沒有\ switch的情況下在後端執行嗎? – itikhomi

0

有了點網的核心2.0,你可以使用這樣

var rv = ViewContext.RouteData.Values; 
string page = $"{rv["page"]}".ToLowerInvariant(); 

在標籤頁剃刀

<li class="@(page == "/index" ? "active" : "")"><a asp-page="/Index" >Home</a></li> 
相關問題