2

我定义了以下站点地图:

<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>

我需要它在我的菜单控件中显示为:项目 | 配置 | 您的帐户 | 登出。

这工作正常但是当我导航到页面 ProjectOverview 和 ProjectViewCalls 时,我丢失class="level1 selected"了列表项的选定属性。我希望能够指出用户当前所在站点的哪个区域。

这可能吗?

4

2 回答 2

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之类的东西。

于 2010-10-25T19:03:39.243 回答
0

我在 codeproject ( http://www.codeproject.com/Articles/669717/How-to-correctly-use-sitemap-for-top-left-menus ) 和这里 ( http:// mangeshdevikar.enziq.com/how-to-correctly-use-sitemap-for-topleft-menus/)。希望能帮助到你。

于 2013-10-29T05:52:25.857 回答