Получить имя страницы ASPNET Core Razor в файле _Layout для обновления элементов навигации

Использование Bootstrap 4 и необходимо добавить активный класс к элементам навигации, чтобы отразить текущую страницу Razor (новые страницы Razor в Core 2.0). Как я могу узнать, на какой странице / контроллере я нахожусь, чтобы я мог добавить имя активного класса к правильному:

<li><a class="active">...

Благодарю.

Обновление: мне удалось решить эту проблему с помощью следующего кода в инициализаторе моей страницы:

@{
    var _action = this.Url.ActionContext.ActionDescriptor.DisplayName;
    var NavDashboard = "/abc";
    ...
}

Затем я могу добавить "активный" класс в каждый элемент навигации, например:

<a asp-page="@NavDashboard" class="nav-link@(_action=="@NavDashboard" ? " active" : string.Empty)">Dashboard</a>

Промыть и повторить для каждого элемента навигации.

1 ответ

Я бы пошел с пользовательским помощником тега, чтобы добавить активный класс к элементу.

Я раздвоил ActiveRouteTagHelper Бена Калла для MVC, изменил его для страниц бритвы и назвал ActivePageTagHelper. Он используется так же, как его, вот так:

<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li is-active-page asp-page="/Index"><a asp-page="/Index">Home</a></li>
        <li is-active-page asp-page="/About"><a asp-page="/About">About</a></li>
        <li is-active-page asp-page="/Contact"><a asp-page="/Contact">Contact</a></li>
    </ul>
</div>
Другие вопросы по тегам