我在此表单中有类别的分层表NodeID
ParentID
NodeName
以下是我使用的代码生成ASP.NET MENU ITEMS
并将其绑定到MENU CONTROL
Private Sub displayMenu()
Using con As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("HagglerEntLibConStr").ConnectionString)
Using sql As New SqlCommand("Select NodeID,ParentID,NodeName FROM Nodes", con)
con.Open()
Dim r As SqlDataReader = sql.ExecuteReader 'stored procedure that returns the above SqlDataReader
Dim tempMaster As New MenuItem()
Dim bagMaster(700) As MenuItem
Dim j As Integer = 0
Do While r.Read()
tempMaster.Value = r("NodeID").ToString()
tempMaster.ToolTip = r("ParentID").ToString()
tempMaster.Text = r("NodeName").ToString()
tempMaster.NavigateUrl = ""
bagMaster(j) = tempMaster
j += 1
tempMaster = New MenuItem()
Loop
r.Close()
Menu1.Items.Clear()
For i As Integer = 0 To j - 1
If i = 0 Then
Menu1.Items.Add(bagMaster(i))
Else
For x As Integer = 0 To j - 1
If bagMaster(i).ToolTip = bagMaster(x).Value Then
Dim c As MenuItem = bagMaster(x)
'you can change the tool tip here if you want
c.ChildItems.Add(bagMaster(i))
End If
Next x
End If
Next i
'Menu1.Items.RemoveAt(0)
End Using
End Using
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
displayMenu()
End Sub
一切正常......但这种方法的主要缺点是Menu CONTROL
创建HTML TABLES
...我在表中有大约1000行...这创建了一个多级菜单。 ..它在页面中添加了很多HTML Tables
并大大增加了页面加载时间...我该如何解决这个问题?这是菜单填充的方式。
答案 0 :(得分:1)
您是否尝试使用RenderingMode属性?
值:
默认。 (这是默认值)。渲染模式取决于RenderingCompatibility控件属性,如果此设置设置为 3.5 ,则默认渲染为table
,如果此值为 4.0 ,默认呈现模式是列表ul
。您可以在web.config文件中全局更改此设置:
<system.web>
<pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>
表。呈现为表格
列表。呈现为列表
由于您使用的是.Net Framework 3.5,可能最好的方法是使用Control Adapters
基本上,适配器适用于特定控件,在适配器中,您可以更新目标控件的呈现,在本例中为Menu
控件
我还没有创建一个控制适配器,所以我不能给你更多的信息,除了指向你正确的方向,谷歌搜索我发现这篇文章看起来很有希望: