I thought that this was easier…
I have a asp:hyperlink control, with target=”_blank”, pointing to the file I want the user to download. My plan is to track the number of times, the users click on this link.
I thought in placing it in ajax update panel, to catch the postback and avoid full page refresh.
However, hyperlink doesn’t have a onClick method.
On the other hand I could use a linkbutton, which has a onClick built in. But It’s harder to make the file open in a new window… and I would also have to do something like:
Response.AppendHeader("Content-Disposition","attachment; filename=myImage.jpg");
But I heard that the above approach has some problems with PPT, PPTX, PPS, PPSX…
What is you’r opinion on this?
How and why, would you do it?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You might want to implement an IHttpHandler to track your downloads, as shown in this article for example.
Basically your handler’s ProcessRequest() method would look something like this:
public void ProcessRequest(HttpContext context)
{
string file = context.Request.QueryString["file"];
// set content type and header (PDF in this example)
context.Response.ContentType = "application/pdf";
context.Response.AddHeader(
"Content-Disposition", "attachment; filename=" + file);
// assuming all downloadable files are in ~/data
context.Response.WriteFile(Server.MapPath("~/data/" + file));
context.Response.End();
}
Then your hyperlink to download a file would be like this:
<a href="/MyApp/MyHandler.ashx?file=someFile.pdf" rel="nofollow noreferrer noopener">...</a>
Method 2
You can add an onclick to an asp hyperlink like so:
aHyperlinkControl.Attributes.Add("onclick", "jsCallToSendCountToServer();");
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0