我正在使用asp:menu
控件并获取绑定菜单的数据来自Sql Server
数据库。
如果我从菜单中选择子项,则必须将父项显示为已选中。 为了实现此功能,我尝试在“MenuItemClick”事件中编写代码。但它没有解雇。 这是我的菜单:
<asp:Menu ID="Menu1" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false"
Orientation="Horizontal" BackColor="#B39DDB" >
<StaticSelectedStyle />
<StaticMenuItemStyle BackColor="#B39DDB" />
<LevelMenuItemStyles>
<asp:MenuItemStyle />
</LevelMenuItemStyles>
</asp:Menu>
将它绑定在这里:
Private Sub PopulateMenu(dt As DataTable, parentMenuId As Integer, parentMenuItem As MenuItem)
Dim currentPage As String = Path.GetFileName(Request.Url.AbsolutePath)
For Each row As DataRow In dt.Rows
Dim menuItem As New MenuItem() With { _
.Value = row("menu_id").ToString(), _
.Text = row("name").ToString(), _
.NavigateUrl = row("location").ToString(), _
.Selected = row("location").ToString().EndsWith(currentPage, StringComparison.CurrentCultureIgnoreCase) _
}
If parentMenuId = 0 Then
Menu1.Items.Add(menuItem)
Dim dtChild As DataTable = Me.GetData(Integer.Parse(menuItem.Value))
PopulateMenu(dtChild, Integer.Parse(menuItem.Value), menuItem)
Else
parentMenuItem.ChildItems.Add(menuItem)
End If
Next
End Sub
这是我要添加一个处理程序:
Protected Sub Menu1_MenuItemClick(sender As Object, e As System.Web.UI.WebControls.MenuEventArgs) Handles Menu1.MenuItemClick
Try
Session("menu_id") = Menu1.SelectedValue.ToString
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
感谢您的支持。
答案 0 :(得分:0)
来自MSDN:MenuItem.NavigateUrl Property
菜单项可以是以下两种模式之一:选择模式或导航模式。默认情况下,菜单项处于选择模式。要将菜单项置于导航模式,请将菜单项的NavigateUrl属性设置为空字符串(“”)以外的值。
当菜单项处于导航模式时,将禁用该菜单项的所有选择事件。在导航模式下单击菜单项会将用户带到指定的URL。您可以选择设置Target属性以指定显示链接内容的窗口或框架。
如果您希望自己的菜单响应代码隐藏中处理的Click事件,则需要将菜单OnMenuItemClick
事件绑定到您的函数,方法是将此部分添加到asp:Menu
声明
OnMenuItemClick="Menu1_MenuItemClick"
并且,也不要设置属性.NavigateUrl
如果您还要将用户定向到另一个页面,则必须在Menu1_MenuItemClick
事件处理程序中发出Response.Redirect,例如:
Response.Redirect("About.aspx")