ASP.NET Coreが初めてです。ナビゲーションメニューがあり、アクティブなアイテムを追跡したい。私のアイデアは、アクションとコントローラーの名前をナビゲーションキーとして使用することです。
問題は、_Layout.cshtmlビューでアクションとコントローラー名を取得する方法がわからないことです...
_ViewContext.ActionDescriptor.DisplayName
_を試しましたが、次のように表示されますMyApp.Controllers.RecordsController.Index (MyApp)
私はこのようなものを入手したいです:
_<script>$("li#@(Controller.Name)-@(Action.Name)")).addClass("active");</script>
_
使用する
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>
かみそりページのドットネットコア2.0を使用すると、次のように使用できます。
var rv = ViewContext.RouteData.Values;
string page = $"{rv["page"]}".ToLowerInvariant();
タグについて
<li class="@(page == "/index" ? "active" : "")"><a asp-page="/Index" >Home</a></li>
this answer と以下を組み合わせると、このサーバー側を実現できます。
あなたの見解のどこかに。
@{
var rv = ViewContext.RouteData.Values;
var id = $"{rv["Controller"]}-{rv["Action"]}".ToLowerInvariant();
}
それぞれの <li>
。
<li class-conditional-active="@(id == "records-index")">...</li>