Как лучше всего передать переменную в партиал макета текущей страницы?

Я реализовал огромный шаблон для нового приложения .Net Core MVC и разделил его на различные части (заголовок, боковая панель, нижний колонтитул).

Он работает хорошо, однако в строке бокового меню

<li class = "active">

на текущей посещаемой странице и измените с:

<li class = "treeview">

к

<li class = "treeview active menu-open">

на любом открытом участке.

Помимо множества операторов if или большого количества беспорядочного кода ОЧЕНЬ, я не могу понять, как это сделать. Кто-нибудь может указать мне правильное направление, пожалуйста?

Похоже, это работа для внешнего интерфейса Javascript (добавление / удаление атрибутов на основе событий внешнего интерфейса, действий пользователя и т. д.). Hth.

EdSF 09.01.2019 18:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужны операторы if, но вам нужно будет использовать троичные (т.е. требуется некоторое количество условной логики). Самый краткий способ справиться с подобными вещами, который я нашел, - это использовать следующий код:

@{ string url; /* define anywhere, just needs to be before nav HTML */ } 

...

@{ url = Url.Action("Foo"); }
<li class = "@(Request.Path == url ? "active" : null)">
    <a href = "@url">Foo</a>
</li>
@{ url = Url.Action("Bar"); }
<li class = "@(Request.Path == url ? "active" : null)">
    <a href = "@url">Bar</a>
</li>

Переменная url объявляется первой, поэтому 50 000 различных переменных не нужны. URL-адрес вообще сохраняется в переменной, поэтому вам не нужно повторять какие-либо вызовы Url.Action и тому подобное (т.е. один для условной, а другой для фактической ссылки). Здесь я просто выполняю прямое сравнение, но вы можете захотеть, чтобы элемент списка был помечен как активный, даже если текущая страница является подпунктом. Для этого вы просто использовали бы Request.Path.StartsWith(url) в качестве условного. Однако не используйте это в ссылке на вашу домашнюю страницу (например, /), иначе она всегда будет отмечена как активная.

Следуйте тому же подходу с элементами «древовидной структуры».

@{ url = Url.Action("Item1"); }
<li class = "treeview @(Request.Path == url ? "active menu-open" : null)">
    <a href = "@url">Tree view item</a>
</li>

Я пытаюсь изучить интерфейсную структуру, как указано в комментарии выше, но это здорово - спасибо ... Мне нравится этот подход (я традиционный программист приложений, который балуется веб-материалами, поэтому мне удобнее это!)

Dev X 11.01.2019 23:53

Другие вопросы по теме