我已定义以下网站地图:
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="Root" roles="*">
<siteMapNode url="~/Default.aspx" title="Home" roles="*" />
<siteMapNode url="~/ProjectList.aspx" title="Projects" roles="*">
<siteMapNode url="~/ProjectOverview.aspx" title="Project Overview" roles="*" />
<siteMapNode url="~/ProjectViewCalls.aspx" title="View Calls" roles="*" />
</siteMapNode>
<siteMapNode url="~/Configuration.aspx" title="Configuration" roles="Administrator" />
<siteMapNode url="~/YourAccount.aspx" title="Your Account" roles="Administrator" />
<siteMapNode url="~/Logout.aspx" title="Logout" roles="*" />
</siteMapNode>
</siteMap>
我需要这个在我的菜单控件中显示为:Home |项目|配置|您的帐户|注销。
这是正常工作但是当我导航到ProjectOverview和ProjectViewCalls页面时,我丢失了列表项的选定class="level1 selected"
属性。我希望能够指出用户当前所在的网站区域。
这可能吗?
答案 0 :(得分:0)
不确定这是否是您正在寻找的,但这是一种简单的方法。将MenuItemDataBound事件添加到菜单控件,然后在事件中使用此代码:
if(e.Item.Selected)
{
if(e.Item.Parent != null && e.Item.Parent.Selectable)
{
e.Item.Parent.Selected = true;
}
}
如果这样做,当前菜单项将没有所选的样式,因此可能会弄乱您的弹出子菜单。
如果根本没有显示子节点,您可以尝试在MenuDataBound上绑定类似的内容:
var myMenu = (Menu) sender;
var currentNode = SiteMap.Provider.FindSiteMapNode(HttpContext.Current);
if (currentNode != null)
{
var parentMenuItem = myMenu.FindItem("Root/" + currentNode.ParentNode.Title);
if (parentMenuItem != null && parentMenuItem.Selectable)
{
parentMenuItem.Selected = true;
}
}
另一种选择是抛弃默认菜单脚本,而是使用类似Superfish的内容。
答案 1 :(得分:0)