我正在开发一个使用母版页和内容页的项目。我的母版页有一个导航栏:
<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,但该页面的内容应根据他们单击的子项而有所不同。我需要一种方法来知道他们单击了哪个子项,并访问该值以填充我的内容页面。
如果有人有更好的方法让我完成这件事,我愿意接受建议和改变。否则,如果我的设置可以工作,并且有一种方法可以让我提取点击的子项的值,我真的很想知道这一点。
我知道如果我在母版页中对子项进行硬编码,我可以轻松获得值,但我的问题是我正在动态创建子菜单子项,我不确定如何访问它。
任何帮助将非常感激!谢谢!
-何塞