web-dev-qa-db-ja.com

現在アクティブなページ、またはビューでコントローラー名とアクション名を取得する方法を追跡します

ASP.NET Coreが初めてです。ナビゲーションメニューがあり、アクティブなアイテムを追跡したい。私のアイデアは、アクションとコントローラーの名前をナビゲーションキーとして使用することです。

enter image description here

問題は、_Layout.cshtmlビューでアクションとコントローラー名を取得する方法がわからないことです...

_ViewContext.ActionDescriptor.DisplayName_を試しましたが、次のように表示されますMyApp.Controllers.RecordsController.Index (MyApp)

私はこのようなものを入手したいです:

_<script>$("li#@(Controller.Name)-@(Action.Name)")).addClass("active");</script>
_
9
Serge

使用する

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

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

PS:必要に応じてToLower()を使用します

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

また、スタイルブロックごとにメニューをアクティブにできます。

<style>
li#@(ViewContext.RouteData.Values["Controller"])-@(ViewContext.RouteData.Values["Action"]) {
//add some style
}
</style>
31
itikhomi

かみそりページのドットネットコア2.0を使用すると、次のように使用できます。

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

タグについて

<li class="@(page == "/index" ?  "active" : "")"><a asp-page="/Index" >Home</a></li>
10
Ravi Selvaraj

this answer と以下を組み合わせると、このサーバー側を実現できます。

あなたの見解のどこかに。

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

それぞれの <li>

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