从编程添加的母版页面menuitem将值传递到内容页面?

时间:2011-11-17 17:22:12

标签: menuitem master-pages navigationbar content-pages

我正在开发一个使用母版页和内容页的项目。我的主页是一个导航栏:

<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'菜单项中。有一个按钮,每次用户点击该按钮时,都会添加一个子菜单项,这样当用户将鼠标悬停在导航菜单中的“Sprint Backlog”上时,子菜单就会出现。我这样做是通过创建一个菜单项列表,创建一个新的menuitem(显示文本,值,navigationURL),将menuitem添加到menuitems列表,然后将列表保存到Session:

    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;     
    }

在我的母版页的代码隐藏中,我创建了一个菜单项列表,从Session设置了menuitem实例的值,并在适当的索引处将子项目添加到导航菜单。我添加的子项是菜单项列表中的菜单项。

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);
            }
        }
    }

我知道我在创建它们时给了这些子项目一个值,但是当我加载SprintBacklog.aspx内容页面时,我的问题是访问这些值。每当用户单击其中一个子项目时,它将始终导航到SprintBacklog.aspx,但该页面的内容应根据他们单击的子项目而有所不同。我需要一种方法来了解他们点击了哪个子项,并访问该值以填充我的内容页面。

如果某人有更好的方式让我把这整件事拿出来,我愿意接受建议和改变。否则,如果我的设置可以工作,并且有一种方法可以提取所点击的子项目的价值,我真的很想知道。

我知道如果我在母版页中对子项目进行硬编码,我可以轻松获得价值,但我的问题是我正在动态创建子菜单子项,我不知道如何访问它。

任何帮助都会非常感激!谢谢!

-Jose

1 个答案:

答案 0 :(得分:0)

自从我提出这个问题以来已经有很长一段时间了,而且我不熟悉主页的工作方式,但如果有人遇到类似的问题,我可能会有一个建议。

我创建的每个菜单项都链接到SprintBacklog.aspx,如下所示:

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

我应该做的是链接到SprintBacklog.aspx,还要使用sprint ID为请求添加参数。

然后处理SprintBacklog.aspx渲染的控制器将读取参数并获取要渲染的相应数据。