【问题标题】:Can you have 2 url's that point to the same page in an asp:Menu control?你能有 2 个 url 指向 asp:Menu 控件中的同一页面吗?
【发布时间】:2009-01-19 16:49:56
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net aspmenu


    【解决方案1】:

    我遇到了同样的问题,并使用了您的解决方案的细微变化:我在 URL 中添加了锚点,例如:

    顺便说一句:我使用的是站点地图文件,当您将具有相同 URL 的节点添加到该文件时,错误/异常非常明显:

    具有相同 URL 的多个节点 '/WebSite1/MyPage.aspx' 是 成立。 XmlSiteMapProvider 需要 站点地图节点具有唯一的 URL。

    所以我想确实不可能有相同的 URL。

    【讨论】:

    • 是的,我知道你的意思。我也在使用站点地图。
    • 我想评论说这个解决方案比人们在 url 末尾添加查询字符串的解决方案要好。在使用 CSS 设置菜单样式时,添加锚可以保持生成的类正确。如果您使用查询字符串,那么类将不会放置在子菜单项中。
    • 问题是,如果您单击要尝试刷新页面的同一菜单链接,它不会刷新。还有其他解决方案吗?
    • @Ronen:使用查询字符串而不是锚点,例如“one.aspx?x=y”。或者使用两个不同的 URL 并配置 URL 重写,使它们都指向同一个页面。
    • 谢谢,我终于用jquery解决了。您建议的查询字符串解决方案有问题,因为它是由 Jade 在这里编写的,当您连接其他查询字符串并假设菜单链接没有所以您添加时也会出现问题?并不是 &。 $(document).ready(function () { // 点击当前地址的菜单项刷新页面 $('# a').click(function () { location.reload(); }); });
    【解决方案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();
       }); });
      

      甚至更好:从文档准备好的href中删除带有数字的锚:

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

        【讨论】:

        • 使用查询字符串会导致选择的类不被添加到子菜单元素中。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 2010-09-22
        • 1970-01-01
        相关资源
        最近更新 更多