Выберите пункт меню на главной странице - PullRequest
1 голос
/ 24 июня 2011

В настоящее время у меня есть элемент управления asp Menu, который загружает SiteMapDataSource в мою мастер-страницу.Одним из узлов карты сайта является «Инструменты», который открывает общую страницу содержимого «Tools.aspx».

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/Default.aspx" title="Home"  description="">
    <siteMapNode url="Tools.aspx" title="Tools"  description="" />
  </siteMapNode>
</siteMap>

Страница «Tools.aspx» содержит кнопку с изображением, которая переносит пользователя на другую страницу содержимого."Translator.aspx".При переходе на эту страницу пункт меню «Инструменты» больше не выбирается.У меня вопрос, как я могу выбрать пункт меню «Инструменты» на главной странице на странице «Translator.aspx»?

Я пробовал следующий метод при загрузке страницы «Translator.aspx»:

protected void Page_Load(object sender, EventArgs e)
{
    //check if logged in
    if (!Page.IsPostBack)
    {
        Menu mp_Menu = (Menu)Page.Master.FindControl("mnuMaster");

        foreach (MenuItem mi in mp_Menu.Items)
        {
            if (mi.Text == "Tools")
            {
                mi.Selected = true;
            }
        }

    }
}

Это не работает, и кажется, что возвращаются 0 пунктов меню.

Было бы очень признательно, если бы кто-то мог пролить свет на эту проблему.Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 июня 2011

Я решил эту проблему, введя следующий код на главной странице:

protected void mnuMaster_MenuItemDataBound(object sender, MenuEventArgs e)
    {
        if (Session["Translator"] != null)
        {
            if (mnuMaster.Items.Count > 0)
            {
                foreach (MenuItem mi in mnuMaster.Items)
                {
                    if (mi.Text == "Tools")
                    {
                        mi.Selected = true;
                        Session["Translator"] = null;
                    }
                }
            }
        }
    }

Затем я добавил на страницу «Translator.aspx» следующее:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Session["Translator"] = "true";
        }
    }

Не думаю, что это идеальное решение, но оно сработало для меня.

0 голосов
/ 24 июня 2011

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

...