Я реализовал огромный шаблон для нового приложения .Net Core MVC и разделил его на различные части (заголовок, боковая панель, нижний колонтитул).
Он работает хорошо, однако в строке бокового меню
<li class = "active">
на текущей посещаемой странице и измените с:
<li class = "treeview">
к
<li class = "treeview active menu-open">
на любом открытом участке.
Помимо множества операторов if или большого количества беспорядочного кода ОЧЕНЬ, я не могу понять, как это сделать. Кто-нибудь может указать мне правильное направление, пожалуйста?





Вам не нужны операторы 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>
Я пытаюсь изучить интерфейсную структуру, как указано в комментарии выше, но это здорово - спасибо ... Мне нравится этот подход (я традиционный программист приложений, который балуется веб-материалами, поэтому мне удобнее это!)
Похоже, это работа для внешнего интерфейса Javascript (добавление / удаление атрибутов на основе событий внешнего интерфейса, действий пользователя и т. д.). Hth.