Как перебирать пункты меню, включая все пункты меню уровня (Asp Vbnet)

#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. Спасибо, это работает так, как должно быть, без изменения одного параметра