2010-03-22 10 views
1

Je pensais que cela était plus facile ...ASP.Net Count Télécharger Clics

J'ai un asp: contrôle de lien hypertexte, avec target=”_blank”, pointant vers le fichier que je veux que l'utilisateur à télécharger. Mon plan est de suivre le nombre de fois, les utilisateurs cliquent sur ce lien.

Je pensais en le plaçant dans le panneau de mise à jour ajax, pour attraper la publication et éviter l'actualisation de la page complète. Toutefois, le lien hypertexte n'a pas de méthode onClick.

.

D'autre part, je pouvais utiliser un linkbutton, qui a un onClick construit en Mais il est plus difficile de faire le fichier ouvert dans une nouvelle fenêtre ... et je dois aussi faire quelque chose comme:

Response.AppendHeader("Content-Disposition","attachment; filename=myImage.jpg"); 

Mais j'entendu dire que l'approche ci-dessus a quelques problèmes avec PPT, PPTX, PPS, pPSX ...

Quelle est you'r opinion à ce sujet? Comment et pourquoi le feriez-vous?

Répondre

5

Vous pouvez implémenter un IHttpHandler pour suivre vos téléchargements, comme illustré dans this article par exemple.

Fondamentalement, la méthode ProcessRequest() de votre gestionnaire ressemblerait à quelque chose comme ceci:

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(); 
} 

Ensuite, votre lien hypertexte pour télécharger un fichier serait comme ceci:

<a href="/MyApp/MyHandler.ashx?file=someFile.pdf">...</a> 
+0

je vais jeter un coup d'oeil, et revenir malade à yo en un rien de temps. Je vous remercie. (J'ai légèrement mis à jour ma question) – Marco

+1

C'est une bonne idée de servir le fichier via votre code de toute façon. Si vous fournissez un lien direct, vous manquez de compter les personnes qui téléchargent le fichier sans cliquer sur le lien. En outre, cela vous permet de limiter l'accès au fichier ou de stocker le fichier dans un autre système (DB, S3, etc.). Les problèmes avec les types de fichiers spéciaux que vous voulez que IE ou d'autres navigateurs peuvent gérer nativement peuvent être surmontés. – Joel

1

Vous pouvez ajouter un onclick à un asp lien hypertexte comme si:

aHyperlinkControl.Attributes.Add("onclick", "jsCallToSendCountToServer();"); 
+0

oui, mais cela entraînerait une publication complète ... et je devrais utiliser un panneau de mise à jour ajax ou quelque chose ... non? – Marco

+0

Non. Avec un contrôle de lien hypertexte, il ne sera pas postback. Ce sera vraiment un simple lien hypertexte HTML. – Larsenal

+1

Il convient de préciser qu'il s'agit d'un événement de clic côté client, et non d'un événement de clic côté serveur. Vous devrez écrire un gestionnaire javascript qui soumet l'événement à une action du serveur afin de l'utiliser. – Joel