UpdatePanel回发将HREF锚定更改为完全限定

时间:2011-08-09 17:24:57

标签: asp.net css ajax asp.net-ajax updatepanel

我在UpdatePanel中有一些链接。例如:

<a href="Products.aspx">Products</a>

我还有一个CSS规则,在非现场链接旁边放置一个图标(HREF以“http”开头的那些):

a[href^="http"]
{
    padding-right: 18px;
    background: transparent url("Icons/offsiteLink.png") no-repeat right bottom;
}

当页面首次加载时,链接正确没有异地图标。问题是在使用UpdatePanel进行Ajax回发后,链接旁边会出现图标!我添加了一个悬停事件来显示href属性,它确实已被更改为在Ajax回发后拥有该页面的完整路径。链接是纯HTML标记还是TreeView节点无关紧要。

这是ASP.NET或Ajax的问题​​吗?我可以阻止吗?

感谢。

更新

我创建了一个全新的网站项目。这是在Visual Studio 2008 / .NET 3.5中。以下是整个代码:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="mainScriptManager" runat="server" />
    <asp:UpdatePanel ID="updatePanel1" runat="server">
        <ContentTemplate>
            <p><a id="internalLink" href="About.aspx"
                onmouseover="$('#hrefValue').text($(this).attr('href'));">About</a></p>
            <p><a id="offsiteLink" href="http://example.com/"
                onmouseover="$('#hrefValue').text($(this).attr('href'));">Offsite</a></p>
            <p>HREF: <span id="hrefValue"></span></p>
            <asp:Button ID="submitButton" Text="Post Back" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

(背后的代码是空的。)

当我在IE 7中加载页面并悬停链接时,我得到:

然后,我点击按钮,再次悬停链接。这次他们是:

请注意,第一个更改为完整路径。

2 个答案:

答案 0 :(得分:1)

您可以在外部网站链接中添加rel =“external”属性,然后使用以下方式设置样式,而不是查找“http”;

a[rel=external] {

}

请参阅CSS - style a link based on its "rel" attribute?

答案 1 :(得分:1)

事实证明,这是由IE7的问题引起的。 IE8不再有问题。

由于几个因素,我决定使用JavaScript来修复它。这是代码。我还包括一个关于我的公司仍然针对IE7的讽刺评论;)

company.offsiteIconFix = (function() {

    function init() {
        var i, allAnchors = document.getElementsByTagName("a");

        for (i = 0; i < allAnchors.length; i++) {
            if (allAnchors[i].hostname && allAnchors[i].hostname ===
                location.hostname) {
                var trimIndex = allAnchors[i].href.indexOf(allAnchors[i].host) +
                    allAnchors[i].host.length;
                var trimmedUrl = allAnchors[i].href.substring(trimIndex);
                allAnchors[i].setAttribute("href", trimmedUrl);
            }
        }
    }

    return {
        init: init
    };
})();

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(company.offsiteIconFix.init);

我可以根据mgnoonan的建议将其更改为插入“rel = external”。