Обновить страницу после загрузки файла
я собрал сценарий загрузки после некоторой замечательной помощи от переполнения стека на днях. Однако теперь я обнаружил, что после загрузки файла мне нужно перезагрузить страницу, чтобы избавиться от шаблона прогресса на странице 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:
он отображает страницу, а затем использует следующий тег 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);