3

在我的代码中,我使用 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

4 回答 4

0

您可以从 AJAX 页面上传文件。您需要做的是在后面的代码中将控件的 ID 添加到需要回发的更新面板回发触发器中。如果控件在同一页面上,则不会有任何问题。

但是,如果您使用具有按钮的用户控件或需要回发的其他 web 控件,则必须通过 USer 控件的公共属性公开此控件的 ID,并让包含页面检索此 ID 并将其添加为回发触发器。

于 2009-03-12T17:23:14.440 回答
0

你错过了重点。要关闭弹出窗口,您必须使用脚本管理器来执行此操作,因为您正在UploadUpdatePanel. 所以像这样注册脚本:

ScriptManager.RegisterStartupScript(UpdatePanelObject, UpdatePanelObject.GetType(), "scripname","your  script here", true);
于 2013-04-09T21:09:07.417 回答
0

我过去使用的一个选项是通过一些 javascript 将下载请求发送到隐藏的 iframe 而不是弹出窗口:

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

这样您就不必担心任何可见的弹出窗口。唯一的缺点是,如果文件下载失败,用户根本不会得到任何提示(而在您的情况下,他们仍然会弹出带有完整错误消息的窗口)。要解决此问题,而不是返回文件,而是返回一个包含一些 javascript 的页面,该页面会在加载时触发某种警报以通知用户错误。

另请注意,从内存中,iframe.remove()iframe 的加载调用在所有(任何?)浏览器中都不起作用,但归根结底,这并不重要,因为在最坏的情况下,你只是得到一个一堆空的 iframe 附加到 dom 的末尾,它们不应该引起任何问题(如果有问题,你总是可以继续重复使用相同的 iframe,而不是创建新的 iframe)。

于 2012-10-08T06:17:06.813 回答
0

我建议你通过一个简单的方法来下载文件

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

这将在不同的窗口中调用您的页面,下载将开始,页面应自动关闭。

于 2013-04-09T21:23:25.220 回答