我正在开发一个使用母版页和内容页的项目。我的主页是一个导航栏:
<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
答案 0 :(得分:0)
自从我提出这个问题以来已经有很长一段时间了,而且我不熟悉主页的工作方式,但如果有人遇到类似的问题,我可能会有一个建议。
我创建的每个菜单项都链接到SprintBacklog.aspx,如下所示:
MenuItem menuItem = new MenuItem("Sprint " + sprintNumber, sprintNumber.ToString(), "SprintBacklog.aspx");
我应该做的是链接到SprintBacklog.aspx,还要使用sprint ID为请求添加参数。
然后处理SprintBacklog.aspx渲染的控制器将读取参数并获取要渲染的相应数据。