Закрытие всплывающего окна после записи файла в ответ - PullRequest
2 голосов
/ 17 декабря 2008

В моем коде я использую JavaScript для запуска события window.open() на странице ASPX. Я выводю файл в событии Page_Load() этой страницы:

Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\";");
outputStream.WriteTo(Response.OutputStream);
outputStream.Flush();
outputStream.Close();
Response.Flush();
Response.Close();

После этого я хочу закрыть это всплывающее окно. Но поскольку я изменил свой тип ответа, я не могу выполнить window.close() в JavaScript. Он просто будет добавлен к файлу, который предоставляется пользователям. Эта тема является наиболее подходящим источником, который я нашел для решения моей проблемы:

Закрытие окна после экспорта в Excel

Но данные ответы мне не помогают, поэтому я в основном застрял. Я не хочу сказать пользователю, чтобы закрыть окно вручную. Вы знаете, как достичь того, к чему я стремлюсь?

Ответы [ 4 ]

0 голосов
/ 10 апреля 2013

Я бы посоветовал вам запустить загрузку файла с помощью простого

<a href="/path/to/your/page.aspx" target="_blank">Download</a>

Это вызовет вашу страницу в другом окне, загрузка начнется, и страница автоматически закроется.

0 голосов
/ 08 октября 2012

Одна из опций, которую я использовал в прошлом, - запуск запроса на загрузку в скрытый iframe вместо всплывающего окна с помощью небольшого количества JavaScript:

var Utils = Utils || {};
Utils.download = function(url) {
    var iframe = $("<iframe/>").hide().appendTo("body").load(function() {
        iframe.remove();
    }).attr("src", url);
};

Таким образом, вам не нужно беспокоиться о каких-либо видимых всплывающих окнах. Единственным недостатком является то, что если загрузка файла не удалась, пользователь не получит никаких намеков на то, что пошло не так (тогда как в вашем случае у него все еще будет всплывающее окно с неповрежденным сообщением об ошибке). Чтобы обойти эту проблему, вместо возврата файла, верните страницу, содержащую некоторый javascript, который запускает какое-то предупреждение при загрузке, чтобы сообщить пользователю об ошибке.

Также обратите внимание, что по памяти вызов iframe.remove() при загрузке iframe не работает во всех (любых?) Браузерах, но в конце концов это не имеет никакого значения, так как в худшем случае вы ' просто заканчиваем с кучей пустых фреймов, прикрепленных к концу dom, которые не должны вызывать проблем (и вы всегда можете продолжать использовать один и тот же, а не создавать новые, если это было проблемой).

0 голосов
/ 10 апреля 2013

Daniel

Вы упускаете суть. Чтобы закрыть всплывающее окно, вы должны использовать менеджер сценариев, чтобы сделать это, учитывая, что вы запускаете Upload из UpdatePanel. Поэтому зарегистрируйте скрипт следующим образом:

 ScriptManager.RegisterStartupScript(UpdatePanelObject, UpdatePanelObject.GetType(), "scripname","your  script here", true);

Надеюсь, это поможет вам!

0 голосов
/ 12 марта 2009

Daniel

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

Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь по этому вопросу.

Спасибо, Прашант Кумбхат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...