Je suis nouveau dans ASP.NET Core. J'ai un menu de navigation et j'aimerais suivre l'élément actif . Mon idée est d'utiliser les noms d'action et de contrôleur comme touches de navigation:
le problème est que je ne sais pas comment obtenir l'action et le nom du contrôleur dans la vue _Layout.cshtml ...
J'ai essayé le ViewContext.ActionDescriptor.DisplayName
mais il rend quelque chose comme ceci MyApp.Controllers.RecordsController.Index (MyApp)
Je préférerais plutôt obtenir quelque chose comme ceci:
<script>$("li#@(Controller.Name)-@(Action.Name)")).addClass("active");</script>
Utilisation
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: Utilisez ToLower () si nécessaire
ViewContext.RouteData.Values["Action"].ToString().ToLower();
Aussi, vous pouvez activer votre menu par bloc de style
<style>
li#@(ViewContext.RouteData.Values["Controller"])-@(ViewContext.RouteData.Values["Action"]) {
//add some style
}
</style>
Avec Net Core 2.0 pour les pages de rasoir, vous pouvez utiliser comme ceci
var rv = ViewContext.RouteData.Values;
string page = $"{rv["page"]}".ToLowerInvariant();
Sur les tags
<li class="@(page == "/index" ? "active" : "")"><a asp-page="/Index" >Home</a></li>
Vous pouvez obtenir ce côté serveur si vous combinez cette réponse avec ce qui suit.
Quelque part dans votre vue.
@{
var rv = ViewContext.RouteData.Values;
var id = $"{rv["Controller"]}-{rv["Action"]}".ToLowerInvariant();
}
Sur chaque <li>
.
<li class-conditional-active="@(id == "records-index")">...</li>