鼠标悬停在asp:HyperLink上时隐藏URL

时间:2016-01-13 23:56:23

标签: c# asp.net

我在HTML中的javascript:void(0)标记上看到了<a>方法,用于隐藏超链接对象的目标网址。现在我想在<asp:HyperLink>上做同样的事情,我该怎么办?

我在做ASP.NET,这是标记:

<asp:HyperLink runat="server" ID="hl1">Blah blah blah</asp:HyperLink>

在代码隐藏中,我使用NavigateUrl方法为hl1指定了HttpUtility.UrlDecode

我在coebehind中尝试了hl1.Attributes[ href ]="javascript:void(0)";,但是没有用。无法再打开NavigateUrl

1 个答案:

答案 0 :(得分:1)

您需要在隐藏字段中存储要导航到的网址,并在标记中设置NavigateUrl = "#",如下所示。这样,当用户的光标悬停在链接上时,实际的导航URL将永远不会显示在浏览器的底部。

然后在客户端附加一个click事件处理程序,用于通过将超链接的onclick属性设置为名为navigate的JavaScript函数来执行的超链接。实际重定向到新页面是由navigate函数完成的。

在这种情况下,您只会看到当前页面的后缀为#的网址。例如,如果您当前的网页网址为http://localhost/mysite/view.aspx,那么它会在浏览器底部显示http://localhost/mysite/view.aspx#

需要加价

<asp:HyperLink runat="server" ID="hl" NavigateUrl="#" 
           onclick="navigate();">Some Text</asp:HyperLink>
<asp:HiddenField ID="hdnURL" runat="server" Value="http://www.microsoft.com" />

需要JavaScript

<script type="text/javascript">
        function navigate() {
            window.location.href = document.getElementById("<%=hdnURL.ClientID%>").value;
        }
</script>

如果必须为代码隐藏中的超链接设置NavigateURL,则可以使用的另一种方法如下所示。在此方法中,您需要在内容呈现之前删除NavigateURL并将其存储在名为linkUrl的全局变量中。在内容呈现之前触发的事件是pageLoad,我们将使用该事件来执行此操作。

JavaScript中的全局变量必须始终在所有方法之外声明。

然后在点击超链接时,我们可以从linkUrl的全局变量中获取值,并将用户重定向到该位置。

注意:保持超链接的标记与第一种方法相同。但是从该标记中删除隐藏字段。

<script type="text/javascript">
    function navigate(event) {
         window.location.href = linkURL;
    }
    var linkUrl = null;
    function pageLoad() {
        var link = document.getElementById("<%=hl.ClientID%>");
        linkURL = link.getAttribute("href");
        link.setAttribute("href","#");
    }
</script>