Передать значения на страницу содержимого из программно добавленного пункта меню главной страницы?

Я работаю над проектом, который использует главную страницу и страницы контента. Моя главная страница панель навигации:

<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, считывает параметр и выбирает соответствующие данные для рендеринга.

Другие вопросы по тегам