从后面的代码中的asp.net菜单控件中获取所选项

时间:2012-10-22 14:01:40

标签: asp.net web-applications

在帖子后面,我似乎无法从MasterPage中的菜单控件中获取所选菜单项。我在page_load中尝试了以下操作,但它不起作用并且错误输出'对象引用没有设置为对象的实例'。

MasterPage中的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>

MasterPage中的Page_Load

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以使用MenuItemClick事件。如果NavigateUrl属性为null“”,则单击事件将触发,如果您有“#”或其他页面的URL,则click事件不起作用。 Reference article

  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对我的情况不够灵活。