C# 从母版页中选择菜单项

C# 从母版页中选择菜单项,c#,select,menu,sitemap,master,C#,Select,Menu,Sitemap,Master,我目前有一个asp菜单控件,可以在母版页中加载SiteMapDataSource。站点地图节点之一是“Tools”,它打开一个通用的“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

我目前有一个asp菜单控件,可以在母版页中加载SiteMapDataSource。站点地图节点之一是“Tools”,它打开一个通用的“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>
这不起作用,似乎返回了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”页面:


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

我想如果你的翻译工具是一个工具,你可以把它放在工具节点上。但是我不希望翻译工具作为一个子菜单。我怎样才能做到这一点?谢谢尝试添加节点以隐藏(未测试)感谢您的帮助,但visible=“false”也不起作用。也许我需要遍历子项?我尝试将该方法置于pre_render中,因此现在菜单数据源加载在pre_render方法之前。这仍然没有解决我的问题,但是仍然返回0个菜单项计数。
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;
                    }
                }
            }
        }
    }
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Session["Translator"] = "true";
        }
    }