J'ai une page qui possède un contrôle de bouton et plusieurs liens pour télécharger des fichiers. Les liens pour les téléchargements de fichiers pointent vers un gestionnaire générique, puisque ces fichiers sont sécurisés et ils ne seront retournés que si l'utilisateur est connecté.L'événement de clic de bouton ASP.NET ne se déclenchera pas après le fichier de téléchargement de l'utilisateur
Si je charge la page et que je clique sur le bouton sans rien faire d'autre, cela fonctionne bien et l'événement se déclenche Mais si je clique sur un lien et télécharge un fichier, la prochaine fois que je clique sur le bouton, il télécharge simplement le fichier à nouveau, au lieu de déclencher l'événement.
Toute aide serait grandement appréciée. Merci d'avance.
Editer: Voici un exemple de lien généré pour le téléchargement d'un fichier. Ceux-ci sont générés à l'aide d'un contrôle LinkButton ASP.NET dans un contrôle de répéteur ASP.NET.
<a id="ctl00_Content_LessonFileRepeater_ctl06_FileLinkButton" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$Content$LessonFileRepeater$ctl06$FileLinkButton", "", false, "", "Handlers/FileDownload.ashx?id=02142fe4-12ab-43bf-82f4-5a72b604ab7b", false, true))">My File.zip</a>
Edit: Voici le code dans le gestionnaire de téléchargement.
public void ProcessRequest(HttpContext context)
{
if (!AuthenticationHelper.UserIsLoggedIn)
RedirectToNotAuthorizedPage(context);
string fileId = context.Request.QueryString["id"];
if (!Regex.IsMatch(fileId, RegexConstants.Guid))
RedirectToNotAuthorizedPage(context);
else
{
var lessonFileRepository = new LessonFileRepository();
LessonFile file = lessonFileRepository.GetById(new Guid(fileId));
if (file == null)
RedirectToNotAuthorizedPage(context);
else
{
if (!AuthenticationHelper.CurrentUser.AuthorizedLessons.Any(i => i.LessonFiles.Any(j => j.LessonFileId == file.LessonFileId)))
RedirectToNotAuthorizedPage(context);
else
{
context.Response.Buffer = true;
context.Response.Clear();
string encodedFileName = context.Server.UrlEncode(file.FileName + '.' + file.FileExtension);
encodedFileName = encodedFileName.Replace(@"+",
context.Request.Browser.Browser == "IE"
? @"%20"
: @"_");
context.Response.AddHeader("content-length", GetFileLength(context, file.Lesson.LessonNumber, file.FileName+"."+file.FileExtension));
context.Response.AddHeader("content-disposition", "attachment; filename=" + encodedFileName + ";");
context.Response.ContentType = "application/" + GetContentType(file.FileExtension) + ";";
context.Response.WriteFile("~/LessonFiles/Lesson" + file.Lesson.LessonNumber + "/" +
file.FileName + '.' + file.FileExtension);
context.Response.End();
}
}
}
}
protected string GetFileLength(HttpContext context, int lessonNumber, string fullFileName)
{
var fileData = File.OpenRead(context.Server.MapPath("~/LessonFiles/Lesson" + lessonNumber + "/" + fullFileName));
return fileData.Length.ToString();
}
Pouvez-vous nous fournir le code qui télécharge en fait le fichier? Quel que soit le code qui se trouve derrière ce lien qui a téléchargé le fichier. – BeemerGuy
Merci pour votre réponse. J'ai édité la question et joint le code dans mon gestionnaire. – user326502