我熟悉使用此方法跟踪文件下载:
<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或如何编辑/重写语句来执行此操作。
答案 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:LinkButton代码是什么样的时候,我确信它看起来类似于你发布的asp:HyperLink代码但是asp:LinkButton没有'NavigateUrl'的属性。如果这更符合您的目的,请告诉我。
答案 2 :(得分:0)
您始终可以覆盖OnLoad()方法并以此方式设置onClick属性。例如:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e)
this.Attributes["onClick"] = "javascript: pageTracker._trackPageview('/downloads/map'); ";
}