2011-11-17 65 views
0

我正在使用母版頁和內容頁的項目。我的母版導航欄:從編程添加的主頁菜單項將值傳遞到內容頁面?

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> 
     <Items> 
      <asp:MenuItem NavigateUrl="~/ProjectPage.aspx" Text="Home" /> 
      <asp:MenuItem NavigateUrl="~/ProductBacklog.aspx" Text="Product Backlog"/> 
      <asp:MenuItem NavigateUrl="~/SprintBacklog.aspx" Text="Sprint Backlog" /> 
      <asp:MenuItem NavigateUrl="~/MeetingPage.aspx" Text="Meetings" /> 
      <asp:MenuItem NavigateUrl="~/Burndown.aspx" Text="Burndown"/> 
      <asp:MenuItem NavigateUrl="~/About.aspx" Text="About Us"/> 
     </Items> 
    </asp:Menu> 

在我的內容頁之一,我動態添加子菜單中的菜單項到我的「代辦衝刺」菜單項。有一個按鈕,每次用戶單擊該按鈕時,都會添加一個子菜單項,以便當用戶將鼠標懸停在導航菜單中的「Sprint Backlog」上時,子菜單就會出現。

protected void btSave_Click(object sender, EventArgs e) 
    {    
     menuItemList = (List<MenuItem>)Session["menuItemList"]; 
      if (menuItemList == null) 
      { 
       menuItemList = new List<MenuItem>();  
      } 

      MenuItem menuItem = new MenuItem("Sprint " + sprintNumber, sprintNumber.ToString(), "SprintBacklog.aspx"); 
      menuItemList.Add(menuItem); 
      Session["menuItemList"] = menuItemList;  
    } 

在代碼:我創建的菜單項列表,創建具有(顯示文字,數值,navigationURL)的新菜單項,添加菜單項來的菜單項列表,然後將列表保存到會話做到這一點在我的母版頁的後面,我創建了一個菜單項列表,從Session中設置菜單項實例的值,並將子項目添加到適當索引處的導航菜單中。我要添加的兒童項目是菜單項列表中的菜單項。

List<MenuItem> menuItemList; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     menuItemList = (List<MenuItem>)Session["menuItemList"]; 

     if (menuItemList != null) 
     { 
      foreach (MenuItem menuitem in menuItemList) 
      { 
       NavigationMenu.Items[2].ChildItems.Add(menuitem); 
      } 
     } 
    } 

我知道是我給這些childitems的值,當我創造了他們,但我的問題是訪問這些值,當我加載SprintBacklog.aspx內容頁。每當用戶點擊其中一個子項時,它將始終導航到SprintBacklog.aspx,但該頁的內容應根據它們所點擊的子項而不同。我需要一種方法來知道他們點擊了哪個小孩,並訪問該值來填充我的內容頁面。

如果有人有更好的方式讓我把這件事情整理出來,我願意提出建議和改變。否則,如果我的設置可以工作,並且有一種方法可以提取被點擊的小孩的價值,我真的很想知道這一點。

我知道如果我在母版頁中對子項目進行硬編碼,我可以很容易地獲得該值,但是我的問題是我正在動態創建子菜單子項目,並且我不確定如何訪問它。

任何幫助將非常感謝!謝謝!

-Jose

+0

有人有什麼想法嗎?我的一位朋友建議使用javascript,但如果可能的話,我想堅持使用純C#。 – Jupo

+0

也許我會創建一個單獨的頁面來選擇衝刺 – Jupo

回答

0

這是一個很長的時間,因爲我問這個問題,我不熟悉masterpages是如何工作的了,但如果有人遇到類似的事情,我可以有一個建議。

我創建每個菜單項被鏈接到SprintBacklog.aspx像這樣:

MenuItem menuItem = new MenuItem("Sprint " + sprintNumber, sprintNumber.ToString(), "SprintBacklog.aspx"); 

我應該做的是鏈接SprintBacklog.aspx,也是一個參數添加到與衝刺ID請求。

然後處理SprintBacklog.aspx渲染的控制器將讀取參數並獲取合適的數據進行渲染。