1

在回帖中,我似乎无法从 MasterPage 的菜单控件中获取选定的菜单项。我在 page_load 中尝试了以下操作,但它不起作用,并且出现“对象引用未设置为对象实例”的错误。

母版页中的 Html

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
       IncludeStyleBlock="false" Orientation="Horizontal">
       <Items>
            <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
           <asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
            <asp:MenuItem NavigateUrl="~/Contact.aspx" Text="Contact" />
       </Items>
</asp:Menu>

母版页中的 Page_Load

 If IsPostBack Then
   Select Case NavigationMenu.SelectedItem.Text
        Case "Home"
            'code
        Case "About"
            'code
        Case "Contact"
            'code
   End Select
End If
4

2 回答 2

2

尝试将代码放入 page_load 中的 if (!IsPostBack) { //Code here }。

于 2012-10-22T14:08:14.400 回答
1

您可以使用 MenuItemClick 事件。如果 NavigateUrl 属性为 null "",则触发 click 事件,如果您有 "#" 或另一个页面的 url,则 click 事件不起作用。参考文章

  Protected Sub NavigationMenu_MenuItemClick(sender As Object, e As System.Web.UI.WebControls.MenuEventArgs) Handles NavigationMenu.MenuItemClick
    Select Case e.Item.Text
        Case "Home"
            'code
        Case "About"
            'code
        Case "Contact"
            'code
    End Select
  End Sub

事件将触发...

<asp:MenuItem NavigateUrl="" Text="Home" />

事件不会触发...

<asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />

注意:我最终使用了无序列表,而不是使用 Javascript 回发到服务器端事件。对于我的情况,asp.net MenuControl 不够灵活。

于 2012-10-23T14:04:03.623 回答