2012-10-22 21 views
1

在回贴中,我似乎无法从MasterPage中的菜单控件中获取所选菜单项。我在page_load中尝试了以下内容,但它不起作用,并出错'对象引用未设置为对象的实例'。从代码后面的代码中获取从asp.net菜单控件中选择的项目

的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 

回答

1

您可以使用MenuItemClick事件。如果NavigateUrl属性为空“”,则点击事件触发,如果您有“#”或另一个网址到另一个页面,则点击事件不起作用。 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对我的情况不够灵活。

2

尝试把你的代码中,如果(!的IsPostBack){//代码在这里}在Page_Load。

+0

在母版代码隐藏它永远不会通过回发。我更新了代码。 – TroyS

+0

在NavigationMenu.SelectedItem中,它将删除每个回发中的值。通过绑定page_load中的if(!IsPostBack)中的NavigationMenu值,确保它的值不会在NavigationMenu.SelectedItem上被擦除。 –

+0

我不确定为什么在设计时完成这些值而不是绑定数据。 – TroyS

相关问题