你有2个url指向asp:Menu控件中的同一页面吗?

时间:2009-01-19 16:49:56

标签: c# asp.net aspmenu

我有一个asp:菜单,它包含一个指向http://www.example.com/one.aspx的顶级菜单项。当您将鼠标悬停在顶级菜单项上时,它会显示一个下拉菜单,其中一个选项为One,指向http://www.example.com/one.aspx。显然,我不能这样做,所以我一直在做?在第二个网址的末尾绕过这个。我很好奇是否有两个url指向asp中的相同位置:菜单?

4 个答案:

答案 0 :(得分:21)

我遇到了同样的问题,并使用了一些解决方案:我在URL中添加了锚点,例如:

BTW:我使用的是站点地图文件,当您添加到该文件的URL相同的节点时,错误/异常非常清楚:

  

具有相同网址的多个节点   '/WebSite1/MyPage.aspx'是   找到。 XmlSiteMapProvider需要   该站点地图节点具有唯一的URL。

所以我想我们确实不可能拥有相同的网址。

答案 1 :(得分:2)

我不相信。

Menu控件使用每个项目的NavigateUrl属性作为标识符以正确突出显示和扩展菜单 - 如果您有两个具有相同URL的节点,控件将如何知道要突出显示哪个节点?

答案 2 :(得分:1)

我在上面的评论中发现我的解决方案仅适用于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, ""));
        });
    });

答案 3 :(得分:0)

您可以附加一个更改的查询字符串变量,例如

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