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