我目前有一个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”页面包含一个图像按钮,可将用户带到另一个内容页面“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个菜单项。
如果有人能够对这个问题有所了解,我会非常感激。感谢。
答案 0 :(得分:0)
尝试将代码移动到pre_render或生命周期的后期,以确保加载后没有加载菜单
答案 1 :(得分: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;
}
}
}
}
}
然后我将以下内容添加到“Translator.aspx”页面:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Session["Translator"] = "true";
}
}
我不认为这是理想的解决方案,但它对我有用。