在我的代码中,我使用JavaScript在ASPX页面上发起window.open()
事件。我在此页面的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();
之后我想关闭这个弹出窗口。但是因为我更改了我的响应类型,所以我无法在JavaScript中执行window.close()
。它只会附加到提供给用户的文件中。这个帖子是我发现解决我问题的最合适的来源:
Closing window after export to excel
但是给出的答案对我没有帮助,所以我基本上被卡住了。我不想告诉用户手动关闭窗口。你知道如何实现我的目标吗?
答案 0 :(得分:0)
丹尼尔,
您可以从AJAX页面上传文件。你需要做的是在后面的代码中添加控件的ID,到Update Panel Post back触发器,这需要一个回发。如果控件位于同一页面上,则不会出现任何问题。但是,如果您使用具有按钮或其他需要回发的web控件的用户控件,则必须通过USer控件的公共属性公开此控件的ID,并让包含页面检索此ID并将其添加为回发后触发。
如果您需要更多帮助,请与我们联系。
谢谢, Prashant Kumbhat
答案 1 :(得分: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的加载调用在所有(任何?)浏览器中都不起作用,但是在一天结束时它无论如何都不重要你最后会在dom的末尾添加一堆空的iframe,这些iframe不会引起任何问题(你可以继续重复使用同一个iframe,而不是创建新的iframe,如果这是一个问题)。
答案 2 :(得分:0)
丹尼尔,
你错过了这一点。要关闭弹出窗口,您必须使用脚本管理器来执行此操作,前提是您从UpdatePanel触发上载。所以注册脚本如下:
的
的 ScriptManager.RegisterStartupScript(UpdatePanelObject, UpdatePanelObject.GetType(), "scripname","your script here", true);
的
希望对你有所帮助!
答案 3 :(得分:0)
我建议您通过简单的
解压缩文件<a href="/path/to/your/page.aspx" target="_blank">Download</a>
这将在不同的窗口中调用您的页面,下载将开始,页面应自动关闭。