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

    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 中设置菜单项实例的值,并将子项添加到导航菜单的适当索引处。我添加的子项是菜单项列表中的菜单项。

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,但该页面的内容应根据他们单击的子项而有所不同。我需要一种方法来知道他们单击了哪个子项,并访问该值以填充我的内容页面。

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

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

任何帮助将非常感激!谢谢!

-何塞

4

1 回答 1

0

自从我问这个问题以来已经有很长时间了,我不再熟悉母版页是如何工作的,但是如果有人遇到类似的事情,我可能会有一个建议。

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

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

我应该做的是链接到 SprintBacklog.aspx,但还要向带有 sprint ID 的请求添加一个参数。

然后处理 SprintBacklog.aspx 渲染的控制器将读取参数并获取适当的数据以进行渲染。

于 2014-02-02T09:15:07.523 回答