Каков наилучший подход к программной настройке стилей в неупорядоченном списке, используемом для навигации, в ASP.NET (не MVC), чтобы соответствующий элемент меню был оформлен как активный элемент, если эта страница просматривается?
Скорее всего, это будет использоваться вместе с MasterPage.





Ответ на ваш вопрос во многом зависит от того, как ваш список реализован {Пользовательский контроль или нет и т. д.}. Как я бы это сделал, это реализовать список, который будет сгенерирован пользовательским элементом управления.
У меня был бы тег UserControl для каждого элемента с чем-то вроде:
<{...} class = "GeneratedMenuItem"> {...}
И у меня были бы соответствующие стили в таблице стилей; конечно, если бы он был в пользовательском элементе управления, вы могли бы использовать темы (но это зависит от того, какую версию ASP.net вы используете.
Прошло много времени с тех пор, как я использовал темы, но я предполагаю, что можно установить тему для их пользовательского элемента управления. Сейчас, когда я думаю об этом, я думаю, что темы пользовательских элементов управления не работали для ASP.NET 2.0. Были ли они реализованы в .NET 3.5, я не уверен.
Хороший вопрос, я пробовал разные способы сделать это еще с плохих старых времен, когда гадюка, и мне еще предстоит найти идеальный молоток.
Обычно я использовал Request.Url.AbsoluteUri (или аналогичный) в качестве аргумента для любой функции рендеринга и чаще всего устанавливаю класс css «текущий» или аналогичный на соответствующем узле, а также при необходимости рендеринг дочерних узлов. .
Я чаще всего использовал комбинацию xml / xsl, с которой обычно можно работать с большинством платформ cms, хотя я никогда не был так доволен накладными расходами, связанными с запуском преобразования xsl только для вывода списка навигации, но если вы знаете xsl, - очень хороший инструмент для создания html, и вы всегда можете кэшировать вывод - для небольших статических html-сайтов, которые появляются время от времени, я часто использую этот подход в процессе сборки для визуализации статической разметки меню.
Также несколько раз использовали функциональность карты сайта aspnet, что очень хорошо, если вы используете с ней дружественные к css адаптеры - рендеринг по умолчанию делает очень уродливую разметку.
Я нашел эту статью ранее на этой неделе: http://blog.devarchive.net/2008/01/auto-generate-strong-typed-navigation.html, который использует шаблоны t4 для создания строго типизированного класса навигации, и я определенно буду исследовать это дальше.
Я применил этот подход к созданию элементов управления гиперссылками ASP.NET для каждого из моих элементов навигации на моей главной странице.
Затем на главной странице я создал общедоступный метод, который назначил бы соответствующий «выбранный» стиль CSS указанному мной элементу управления:
Public Sub SetNavigationPage(ByVal MenuName As String)
DirectCast(Me.FindControl(MenuName), HyperLink).CssClass = "MenuCurrent"
End Sub
Затем на моих информационных страницах мне просто нужно было соответствующим образом ссылаться на главную страницу.
Dim myMaster As EAF = DirectCast(Me.Master, EAF)
myMaster.SetNavigationPage("hypSearchRequest")
Это дало мне возможность добавлять / удалять элементы навигации на различных страницах, а также при необходимости назначать несколько страниц для параметра навигации администратора.
Также интересно отметить, что ссылка на элемент управления гиперссылкой и установка атрибута Visibility (для скрытия административных страниц) не работали. Это связано с порядком, в котором загружаются главная страница и страница содержимого. Вместо этого я создал другой класс CSS, который просто установил свойство видимости и использовал тот же подход, что и выше.
Если вы установите свойство видимости в CSS, меню все равно будет отображаться в разметке, но не отображается в браузере. Это позволит людям, просматривающим вашу разметку, узнать, что доступно больше меню. Я думаю, что видимость на стороне сервера - лучший подход.
Как использовать темы? Это будет приложение ASP.NET 2.0 (VS 2008 .Net 3.5)