通过ASP代码显示表中的菜单名称

时间:2011-07-13 16:32:34

标签: function asp-classic

我有关于asp.My问题的问题;表格结构类似于那些。这些列调用了MenuIDAlt_MenuIDMenu_Adi。最后,我想在菜单表的menu_adi列中显示这些项目。

例如;

MenuID   Alt_MenuID   Menu_Adi

1           0         Anasayfa
2           0         Urunler
3           2         Bisiklet (Alt_MenuID=2 is equal to MenuID=2,So the sub menu of urunler is bisiklet) 
4           3         Üç Tekerlekli Bisiklet (Alt_MenuID=3 is equal to MenuID=3.So,the sub menu of bisiklet is Üç Tekerlekli Bisiklet) 
5           0         İletişim
6           5         Harita(sub menu of the iletişim)

我希望像那样展示。

- Anasayfa
- Ürünler
- - Bisiklet (sub menu)
- - - Üç tekerlekli bisiklet ( sub menu of the bisiklet)
- İletişim
- - Harita ( sub menu)

我正在使用下面的功能。

<%function MenuYazdir(MenuID,say) 

Set Liste = Data.Execute("Select MenuID,Alt_MenuID,MenuAd From Menuler Where   Alt_MenuID="& MenuID)
if Liste.Eof=False Then
 Do Until.Liste.Eof
  Response.write("-"& Liste("MenuAd") &"<br>")
  call MenuYazdir(Liste("MenuID"),0)
Liste.MoveNext
Loop
 End if
Set Liste = Nothing

End function%>

<% call MenuYazdir(0,0)%> 

1 个答案:

答案 0 :(得分:0)

你在一个带有递归函数和“父”字段的正确路径上,但是你似乎正在使用像sub这样的函数,这并不重要,只不是“常规”的做事方式。 / p>

要在项目之前获得正确数量的破折号,请传递level变量并在调用递归之前递增它。

尝试这样的事情:

<%
Function MenuYazdir(MenuID,strOutput, intLevel) 

    Set Liste = Data.Execute("Select MenuID,Alt_MenuID,MenuAd From Menuler Where   Alt_MenuID="& MenuID)
    Do While NOT Liste.Eof
        For i = 1 to intLevel
            strOutput = stroutput & "- "
        Next
        strOutput = strOutput & Liste("MenuAd") &"<br>"
        intLevel = intLevel + 1
        strOutput = MenuYazdir(Liste("MenuID"), strOutput, intLevel)
        intLevel = intLevel -1
        Liste.MoveNext
    Loop
    Set Liste = Nothing

End Function
%>

<%= MenuYazdir(0,0) %>

我已经删除了对if / end if的需要并将其转换为正确的函数,因此您可以对输出执行更多操作(因此您可以将其传递回递归)。