当我使用<asp:hyperlink>标记时,如何跟踪(Google Analytics)单个文件的下载?</asp:hyperlink>

时间:2010-11-19 20:04:09

标签: asp.net google-analytics

我熟悉使用此方法跟踪文件下载:

<a href="http://www.example.com/files/map.pdf" onClick="javascript: pageTracker._trackPageview('/downloads/map'); ">

但现在我需要使用以下代码跟踪文件下载:

<asp:HyperLink ID="HyperLink3" runat="server" 
    NavigateUrl="~/Protected/Download.aspx?pfile=logos.zip" 
    ForeColor="Black" style="text-decoration:none"><b>Download<img src="../external_files/images/downloadzip.gif" 
    style="width: 40px; height: 40px" border="0" /></b>
</asp:HyperLink>

从我发现的使用中 onClick="javascript: pageTracker._trackPageview('/downloads/map');
不管用。我还读到onClick甚至不能用于asp:超链接。

我不知道ASP,跟踪这个文件的下载最简单的方法是什么?我尝试过使用asp:linkbutton,但我没有成功(虽然我可能编码错误)。

修改
解释我的问题的另一种方式是:
我遇到了我需要跟踪文件下载的asp链接,但我不知道asp或如何编辑/重写语句来执行此操作。

3 个答案:

答案 0 :(得分:0)

您可以考虑使用另一个支持OnClientClick属性的asp控件,而不是asp:超链接。

另一种选择是使用JavaScript(使用您喜欢的库,即jQuery)将Google Analytics事件跟踪代码附加到您的asp:超链接:

jQuery("#GeneratedIDForHyperLink3").click(
    function() { 
        try { 
            pageTracker._trackEvent(categoryVal, actionVal, labelVal);
        } catch(err) {}
    });

您可以在document.ready()块中执行类似的操作。

<强>更新

您可以使用asp:linkbutton,在OnClientClick中添加javascript以防止将按钮单击操作发布到服务器。

<asp:LinkButton ID="HyperLink3" runat="server" ForeColor="Black" Style="text-decoration: none" OnClientClick="javascript: pageTracker._trackPageview('/downloads/map');document.location = '/Protected/Download.aspx?pfile=logos.zip';return false;">
<b>Download<img alt="" src="../external_files/images/downloadzip.gif" style="width: 40px; height: 40px" border="0" /></b>
</asp:LinkButton>

请注意,OnClientClick会调用您的Google跟踪事件功能,然后更改文档位置,并且为安全起见,返回false以防止发布到服务器。

我不会称这是一种最佳做法,并且会亲自考虑以不同的方式进行。

答案 1 :(得分:0)

您是否尝试过使用OnClientClick? OnClick执行服务器端,其中OnClientClick在客户端工作,然后将控制权传递给服务器。

尝试:

<script type="text/javascript">
    $(function () {
        function Foo() {
            javascript: window.open("~/Protected/Download.aspx?pfile=logos.zip");
        }
        $("#MyLinkButton").click(function () {
            javascript: pageTracker._trackPageview('/downloads/map');
        });
    });
</script>

<asp:LinkButton ID="MyLinkButton" runat="server" 
                Text="ClickMe" OnClientClick="Foo()" />

或者如果你想在服务器端处理页面跟踪,你可以尝试类似的东西:

<script type="text/javascript">
    $(function () {
        function Foo() {
            javascript: window.open("~/Protected/Download.aspx?pfile=logos.zip");
        }
    });
</script>

<asp:LinkButton ID="MyLinkButton" runat="server" 
                Text="ClickMe" OnClientClick="Foo()" OnClick="MyLinkButton_Click" />

// Server side code
public void MyLinkButton_Click (object sender, EventArgs e)
{
    pageTracker._trackPageview('/downloads/map');
}

当我最初问你的asp:LinkBut​​ton代码是什么样的时候,我确信它看起来类似于你发布的asp:HyperLink代码但是asp:LinkBut​​ton没有'NavigateUrl'的属性。如果这更符合您的目的,请告诉我。

答案 2 :(得分:0)

您始终可以覆盖OnLoad()方法并以此方式设置onClick属性。例如:

protected override void OnLoad(EventArgs e)
{
     base.OnLoad(e)
     this.Attributes["onClick"] = "javascript: pageTracker._trackPageview('/downloads/map'); ";
}