【问题标题】:Closing a pop-up window after writing file to response将文件写入响应后关闭弹出窗口
【发布时间】:2010-09-27 08:03:58
【问题描述】:

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

但是给出的答案对我没有帮助,所以我基本上被卡住了。我不想告诉用户手动关闭窗口。你知道如何实现我的目标吗?

【问题讨论】:

    标签: c# asp.net response


    【解决方案1】:

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

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

    【讨论】:

    • 那很好,但我没有使用标准的 asp.net UpdatePanel。
    【解决方案2】:

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

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

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

    还请注意,根据内存,iframe 加载时的iframe.remove() 调用在所有(任何?)浏览器中都不起作用,但归根结底,这并不重要,因为最坏的情况是你'最终只是在 dom 的末尾附加了一堆空的 iframe,这不会导致任何问题(如果出现问题,您总是可以继续重复使用相同的 iframe,而不是创建新的 iframe)。

    【讨论】:

      【解决方案3】:

      你没有抓住重点。要关闭弹出窗口,您必须使用脚本管理器来执行此操作,因为您正在从 UpdatePanel 触发 Upload。所以像这样注册脚本:

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

      【讨论】:

        【解决方案4】:

        我建议您通过简单的方式下载文件

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

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

        【讨论】:

        • 火狐...只是火狐。它不会关闭下载窗口。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-11
        • 2023-03-03
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多