Обновить страницу после загрузки файла

я собрал сценарий загрузки после некоторой замечательной помощи от переполнения стека на днях. Однако теперь я обнаружил, что после загрузки файла мне нужно перезагрузить страницу, чтобы избавиться от шаблона прогресса на странице aspx. Код для удаления шаблона работал до того, как я добавил его в код загрузки.

код для удаления шаблона прогресс: upFinanceMasterScreen.Update();

Я попытался позвонить, поставив это до и после перенаправления на IHttpHandler

Response.Redirect("Download.ashx?ReportName=" + "RequestingTPNLeagueTable.pdf");


public class Download : IHttpHandler {

public void ProcessRequest(HttpContext context)
{    

   StringBuilder sbSavePath = new StringBuilder();
   sbSavePath.Append(DateTime.Now.Day);
   sbSavePath.Append("-");
   sbSavePath.Append(DateTime.Now.Month);
   sbSavePath.Append("-");
   sbSavePath.Append(DateTime.Now.Year);

    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.ContentType = "application/pdf";
    HttpResponse objResponce = context.Response;
    String test = HttpContext.Current.Request.QueryString["ReportName"];
    HttpContext.Current.Response.AppendHeader("content-disposition", "attachment; filename=" + test);
    objResponce.WriteFile(context.Server.MapPath(@"Reports" + sbSavePath + @"" + test));    

}
 public bool IsReusable { get { return true; } } 

Спасибо за любую помощь вы можете предоставить!

3 ответов


когда вы отправляете обратно файл для загрузки пользователем,это - это HTTP-запрос. Другими словами, вы можете или есть post-back, который обновляет страницу браузера или вы можете отправить файл пользователю на скачивание. Вы не можете делать и то и другое без специальных трюков.

вот почему большинство сайтов При загрузке файла, это первый выводит вас на новую страницу, на которой говорится: "ваша загрузка вот-вот начнется", а затем "перенаправляет" вас в файл для загрузки с помощью meta-refresh или javascript.

например, когда вы идете сюда, чтобы загрузить .NET 4 runtime:

http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true

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

<META HTTP-EQUIV="refresh" content=".1; URL=http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe" />

вам, вероятно, придется делать что-то похожее в вашем приложении. Однако, если вы действительно заинтересованы в чем-то после файл полностью скачали, вам не повезло, так как нет события, чтобы сообщить об этом браузере. Единственный способ сделать это AJAX загрузить как gmail использует при загрузке вложения.


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

для этого я просто изменил представление, добавив событие onclick к кнопке загрузки, которая вызвала следующий скрипт (также в представлении):

setTimeout(function () {
        window.location.reload(1);
    }, 5000);

Это соответствует моей цели... надеюсь, это поможет кому-то еще.


это быстро и легко взломать при необходимости.

Шаг 1: добавить скрытую кнопку .aspx-страницы:

<asp:Button ID="btnExportUploaded" runat="server" Text="Button" style="visibility:hidden"  OnClick="btnExportUploaded_Click" CssClass="btnExportUploaded" />

Шаг 2: выполните действие обратной передачи по умолчанию и в конце зарегистрируйте сценарий запуска с вызовом jquery, который вызовет скрытую кнопку и вызовет загрузку файла:

ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(this.GetType(), "modalstuff", "$('.btnExportUploaded').click();", true);