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

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

<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 Ответ

0 голосов
/ 02 февраля 2014

Прошло много времени с тех пор, как я задал этот вопрос, и я не знаком с тем, как больше работают мастер-страницы, но если кто-то испытывает что-то подобное, у меня может быть предложение.

Каждый пункт меню, который яПри создании была ссылка на SprintBacklog.aspx примерно так:

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

Мне нужно было сделать ссылку на SprintBacklog.aspx, но также добавить параметр в запрос с идентификатором спринта.

Затем контроллер, который обрабатывает рендеринг SprintBacklog.aspx, считывает параметр и выбирает соответствующие данные для рендеринга.

...