Есть две страницы: 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".