Может у вас есть 2 url, которые указывают одну и ту же страницу в asp: Menu control?

У меня есть asp: Menu и содержит элемент меню верхнего уровня, который указывает на http://www.abc.com/one.aspx. Когда вы наводите верхний элемент меню верхнего уровня, он показывает выпадающий список, и один из вариантов - один, который указывает на http://www.abc.com/one.aspx. Видимо, я не могу этого сделать, поэтому я поставил? в конце второго URL, чтобы обойти это. Мне было любопытно, возможно ли иметь два URL-адреса, указывающих на одно и то же местоположение в asp: Menu?

Ответ 1

У меня была та же проблема, и я использовал небольшую вариацию вашего решения: я добавил привязки к URL-адресу, например:

BTW: Я использовал файл Sitemap, и когда вы добавляете узлы с тем же URL-адресом в этот файл, ошибка/исключение довольно ясна:

Несколько узлов с одинаковым URL-адресом '/WebSite1/MyPage.aspx' были найденный. XmlSiteMapProvider требует что узлы карты сайта имеют уникальные URL-адреса.

Поэтому я думаю, что действительно невозможно иметь идентичные URL-адреса.

Ответ 2

Я так не верю.

Элемент управления Menu использует каждый элемент NavigateUrl как идентификатор для выделения и расширения меню правильно - если у вас есть два узла с одним и тем же URL-адресом, как элемент управления будет знать, какой из них выделить?

Ответ 3

Я узнал, что мое решение в вышеприведенном комментарии работает только с Firefox, это улучшенное решение для обновления страницы, даже если вы нажмете на ту же ссылку, что и текущая, но с хэш-тегом:

$(document).ready(function () { // refresh page when clicking menu item with current address $('#<%=aspMenu.ClientID%> a').click(function () {
   var currentUrl = location.pathname;
                var clickedUrl = $(this).attr('href');
                if (currentUrl.indexOf('#') != -1 || clickedUrl.indexOf('#') != -1){
                    if (currentUrl.indexOf('#') != -1)
                        currentUrl = currentUrl.substring(0, currentUrl.indexOf('#'));
                    if (clickedUrl.indexOf('#') != -1)
                        clickedUrl = clickedUrl.substring(0, clickedUrl.indexOf('#'));
                    if (currentUrl == clickedUrl)
                        location.reload();
 }); });

Или даже лучше: удаление якорей с цифрами из hrefs на готовом документе:

    $(document).ready(function () {
        $('#<%=aspMenu.ClientID%> a').each(function () {
            var re = /#\d/
            var url = $(this).attr('href');
            $(this).attr('href', url.replace(re, ""));
        });
    });

Ответ 4

Вы можете присоединить переменную строки запроса, которая изменяется, например.

<siteMapNode url="~/UnderConstruction.aspx?x=1" title="Customer"  description="Customer" />
<siteMapNode url="~/UnderConstruction.aspx?x=2" title="User"  description="User" />
<siteMapNode url="~/UnderConstruction.aspx?x=3" title="Area"  description="Area" />
<siteMapNode url="~/UnderConstruction.aspx?x=4" title="Well"  description="Well" />
<siteMapNode url="~/UnderConstruction.aspx?x=5" title="Build Report"  description="Build" />