[asp:Menu] Текущий элемент
От: Spiceman  
Дата: 10.05.11 13:56
Оценка:
Есть две страницы: main.aspx и content.aspx.
На страницах лежит SiteMapDataSource и привязанный к нему Menu.
Если я делаю переходы по одной странице с разными параметрами, то у меня Menu.SelectedItem

корректно устанавливается. То есть, например, при переходе с content.aspx?id=1 на content.aspx?id=2

Menu.SelectedItem меняет свое значение.
Если я делаю переход на другую страницу, например, с content.aspx на main.aspx, то

Menu.SelectedItem = null. Из-за этого нет возможности подсветить текущий пункт меню.
При этом компонент SiteMapPath всегда корректно отображает текущий путь куда бы я не переходил.

Чтобы решить проблему, пришлось написать такой костыль на каждой странице:
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Menu.DataBind();
                // Проход только по второму уровню меню. Первый не нужен, а других все равно нет.
                foreach (MenuItem menuItem in Menu.Items[0].ChildItems)
                {
                    if (menuItem.NavigateUrl.TrimEnd('/') == Request.RawUrl.TrimEnd('/'))
                        menuItem.Selected = true;
                }
            }
        }


Можно как-то без такого костыля обойтись. Всего-то нужно, что у текущего элементы меню в странице

добавлялся класс "selected".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.