#asp.net #vb.net
#asp.net #vb.net
Вопрос:
Вот мой код
Protected Sub NavMenu_Init(sender As Object, e As EventArgs) Handles NavMenu.PreRender
Dim a As String = Replace(Request.Url.AbsolutePath, "/Home.aspx", "/")
For Each i As MenuItem In NavMenu.Items
If i.Target = a And Not i.Target = "" Then
i.Selected = True
End If
If i.Target = "" Then
i.Selected = False
End If
For Each aa As MenuItem In i.ChildItems
If aa.Target = a And Not aa.Target = "" Then
aa.Selected = True
End If
If aa.Target = "" Then
aa.Selected = False
End If
For Each b As MenuItem In aa.ChildItems
If b.Target = a And Not b.Target = "" Then
b.Selected = True
End If
If b.Target = "" Then
b.Selected = False
End If
Next
Next
Next
End Sub
Проблема в том, что для каждого дочернего уровня в меню мне нужно повторить код.
Мне нужно знать, есть ли какой-либо способ перебирать все уровни меню, независимо от того, сколько уровней, одновременно, только по одному для каждой функции.
Каким-то образом, как
For Each i As MenuItem In NavMenu.Items and childitems
If i.Target = a And Not i.Target = "" Then
i.Selected = True
End If
If i.Target = "" Then
i.Selected = False
End If
Next
Заранее спасибо
Комментарии:
1. Похоже, вы могли бы использовать рекурсию для решения этой проблемы: en.wikipedia.org/wiki/Recursion_ (computer_science)
2. я так думаю. Но мне не пришло в голову сделать рекурсию через это
Ответ №1:
Что-то вроде этого:
Private Sub UpdateItems(child as MenuItem, targetURL as String)
If child.Target = targetURL then child.Selected = true
if child.Target = "" then child.Selected = false
For each ch as MenuItem in child.ChildItems
UpdateItems(ch, targetURL)
next
End Sub
Вызывается так:
Protected Sub NavMenu_Init(sender As Object, e As EventArgs) _
Handles NavMenu.PreRender
Dim a As String = Replace(Request.Url.AbsolutePath, "/Home.aspx", "/")
For Each i as MenuItem in NavMenu.Items
UpdateItems(i, a)
next
End Sub
Приведенный выше код должен выполнять ваши проверки для каждого элемента меню, исходящего из NavMenu.
Обратите внимание, что я на самом деле не тестировал этот код, и, возможно, можно было бы упростить его дальше, но я не был уверен, что это за элемент управления NavMenu.
Комментарии:
1. Спасибо, это работает так, как должно быть, без изменения одного параметра