Использование ASP.net Menu Control с картой сайта - PullRequest
2 голосов
/ 24 октября 2010

У меня определена следующая карта сайта:

<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" элемента списка. Я хочу иметь возможность указать, в какой области сайта в данный момент находится пользователь.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 29 октября 2013

Я написал подробную статью для этого в 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/).Надеюсь, поможет.

0 голосов
/ 25 октября 2010

Не уверен, что это то, что вы ищете, но вот простой способ сделать это.Добавьте событие 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 вместо.

...