Событие нажатия кнопки ASP.NET не запускается после загрузки файла пользователем - PullRequest
1 голос
/ 28 октября 2010

У меня есть страница с кнопочным управлением и несколькими ссылками для загрузки файлов. Ссылки для загрузки файлов указывают на общий обработчик, так как эти файлы защищены и будут возвращены, только если пользователь вошел в систему.

Если я загружаю страницу и нажимаю кнопку, ничего не делая, все работает нормально, и событие запускается. Но если я щелкаю ссылку и скачиваю файл, в следующий раз, когда я нажимаю кнопку, он просто снова загружает файл, а не запускает событие.

Любая помощь будет принята с благодарностью. Заранее спасибо.

Редактировать: Вот пример ссылки, которая создается для загрузки файла. Они создаются с использованием элемента управления ASP.NET LinkButton внутри элемента управления повторителя ASP.NET.

<a id="ctl00_Content_LessonFileRepeater_ctl06_FileLinkButton" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$Content$LessonFileRepeater$ctl06$FileLinkButton&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Handlers/FileDownload.ashx?id=02142fe4-12ab-43bf-82f4-5a72b604ab7b&quot;, false, true))">My File.zip</a>

Редактировать: вот код в обработчике загрузки.

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

1 Ответ

0 голосов
/ 10 января 2011

Ваш браузер кэширует запрос. Запрос никогда не достигает сервера вообще ... вы можете проверить журналы запросов, чтобы подтвердить это.

Чтобы отключить это, вам нужно добавить следующую строку кода в ваш ответ:

context.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...