自学Web开发第十六天-基于VB和ASP.NET,深入研究 Menu 控件,从数据库动态加载菜单节点
之前在研究导航的时候粗略研究了一下 Menu 控件,该控件直接绑定 SiteMapDataSource 控件,从 Web.sitemap 加载导航信息。这种方法十分简单,但是不够灵活。所以这里深入研究下从数据库动态加载菜单节点信息。
菜单的结构
整个菜单由一级菜单、二级菜单、三级菜单等各级节点组成。在站点地图中生成的菜单是有个根节点的,而动态添加节点就不需要根节点,直接添加即可。
各级菜单节点均是 MenuItem 对象,只要实例化后,添加到各级菜单上就行。 MenuItem 对象的重要属性如下:
- Enbabled : 启用菜单项
- NavigateUrl :点击菜单项跳转的地址
- Text :菜单项显示的文本
- Value :菜单项的值
- ToolTip : 鼠标放到菜单项上显示的提示
- Selectable :是否可以选择菜单项(即点击菜单项是否跳转页面)
需注意的是,动态添加的菜单项各节点是否显示也收到 Menu 控件的 MaximunDynamicDisplayLevels 属性影响。
一级菜单节点的添加
一级菜单节点直接在控件上添加,创建 MenuItem 对象,然后直接添加到 Menu 对象的 Items 成员里就行。
Dim item As New MenuItem With {
.NavigateUrl = "",
.Value = "001",
.Text = "测试页1",
.ToolTip = "测试1的提示"
.Selectable = False
}
Menu.Items.Add(item)
二级至多级菜单节点的添加
和一级菜单节点的添加不同的是,从二级菜单节点开始,添加 MenuItem 对象要在父节点的 ChildItems 成员里。
Dim item As New MenuItem With {
.NavigateUrl = "",
.Value = "001",
.Text = "测试页1",
.ToolTip = "测试1的提示"
.Selectable = False
}
Menu.Items.Add(item)
Dim child As New MenuItem With {
.Text = "测试子节点1",
.Value = "002",
.Selectable = False
}
item.ChildItems.Add(child)
' 或使用 Menu.Items(0).ChildItems.Add(child) 来添加
使用数据库添加菜单节点
这里假设数据库里获取了一个数据表 table ,表结构为 id / text / pa