Можете ли вы иметь 2 URL, которые указывают на одну и ту же страницу в asp: Меню управления? - PullRequest
12 голосов
/ 19 января 2009

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

Ответы [ 4 ]

21 голосов
/ 19 января 2009

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

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

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

Так что я думаю, что на самом деле невозможно иметь идентичные URL.

2 голосов
/ 19 января 2009

Не верю.

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

1 голос
/ 18 июня 2014

Я обнаружил, что мое решение в приведенном выше комментарии работает только в 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();
 }); });

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

    $(document).ready(function () {
        $('#<%=aspMenu.ClientID%> a').each(function () {
            var re = /#\d/
            var url = $(this).attr('href');
            $(this).attr('href', url.replace(re, ""));
        });
    });
0 голосов
/ 01 марта 2009

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

<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" />
...