从母版页中选择一个菜单项

本文关键字:一个 菜单项 母版页 选择 | 更新日期: 2023-09-27 18:00:08

我目前有一个asp菜单控件,它在我的主页中加载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"页面包含将用户带到另一内容页面的图像按钮";翻译器.aspx";。当导航到此页面时;工具;菜单项不再被选中。我的问题是,我如何选择";工具;来自主页面的菜单项;翻译器.aspx";页

我在";翻译器.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个菜单项。

如果有人能阐明这个问题,我将不胜感激。

从母版页中选择一个菜单项

尝试在生命周期的后期将代码移动到pre_render或其他位置,以确保在加载后不会加载菜单

我通过在母版页中输入以下代码解决了这个问题:

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";
        }
    }

我不认为这是理想的解决方案,但它对我有效。