Asp.Net菜单来自Sql Server“MenuItemClick”事件未触发

时间:2018-06-07 07:29:50

标签: asp.net vb.net dynamic

我正在使用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

感谢您的支持。

1 个答案:

答案 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")