2012-10-22 4 views
1

포스트에서 나는 MasterPage의 메뉴 컨트롤에서 선택한 메뉴 항목을 얻을 수없는 것 같습니다. page_load에서 다음을 시도했지만 작동하지 않으며 '오브젝트 참조가 오브젝트의 인스턴스로 설정되지 않았습니다'오류가 발생합니다. MasterPage코드에서 asp.net 메뉴 컨트롤에서 선택한 항목 가져 오기

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

답변

1

MenuItemClick 이벤트를 사용할 수 있습니다. NavigateUrl 속성이 null 인 경우 click 이벤트가 발생하고 "#"또는 다른 페이지에 대한 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" /> 

참고 : 나는 자바 스크립트 포스트 백 대신 정렬되지 않은 목록을 사용하여 종료 에 서버 측 이벤트. asp.net MenuControl 내 상황에 충분히 유연하지 않았습니다.

2

에서

하는 HTML MasterPage에서

<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이 경우 내부 코드를 넣어보세요 (! IsPostBack을) {// 코드를 여기}를 Page_Load한다.

+0

masterpage codebehind에서는 결코 포스트 백을 통과하지 않습니다. 나는 코드를 업데이트했다. – TroyS

+0

NavigationMenu.SelectedItem에서 각 포스트 백에서 값을 지 웁니다. page_load에서 if (! IsPostBack) 안의 NavigationMenu 값을 바인딩하여 NavigationMenu.SelectedItem에서 해당 값이 지워지지 않았는지 확인하십시오. –

+0

값이 디자인 타임에 완료되고 데이터 바인딩되지 않은 경우 항목을 바인딩하는 이유가 확실하지 않습니다. – TroyS

관련 문제