Передать значения на страницу содержимого из программно добавленного пункта меню главной страницы?
Я работаю над проектом, который использует главную страницу и страницы контента. Моя главная страница панель навигации:
<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;
}
В коде для моей главной страницы я создаю список элементов меню, устанавливаю значение экземпляра элемента меню из сеанса и добавляю дочерние элементы в меню навигации по соответствующему индексу. Дочерний элемент, который я добавляю - это элементы меню из списка пунктов меню.
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, но содержимое этой страницы должно отличаться в зависимости от того, какой дочерний элемент он щелкнул. Мне нужен способ узнать, по какому дочернему элементу они нажали, и получить доступ к этому значению, чтобы заполнить мою страницу контента.
Если у кого-то есть для меня лучший способ выполнить все это, я открыт для предложений и изменений. В противном случае, если мои настройки могут работать, и у меня есть способ извлечь значение элемента clicked, я бы очень хотел это знать.
Я знаю, что если я жестко закодирую дочерние элементы на своей главной странице, я легко получу значение, но моя проблема в том, что я создаю дочерние элементы подменю динамически, и я не уверен, как получить к нему доступ.
Любая помощь могла бы быть полезна! Спасибо!
-Jose
1 ответ
Прошло много времени с тех пор, как я задавал этот вопрос, и я больше не знаю, как работают мастер-страницы, но если кто-то испытывает что-то подобное, у меня может быть предложение.
Каждый элемент меню, который я создавал, ссылался на SprintBacklog.aspx примерно так:
MenuItem menuItem = new MenuItem("Sprint " + sprintNumber, sprintNumber.ToString(), "SprintBacklog.aspx");
Я должен был сделать ссылку на SprintBacklog.aspx, но также добавить параметр в запрос с идентификатором спринта.
Затем контроллер, который обрабатывает рендеринг SprintBacklog.aspx, считывает параметр и выбирает соответствующие данные для рендеринга.