如何在响应后关闭窗口?

时间:2012-12-13 06:17:26

标签: c# javascript jquery asp.net

我正在使用ASP.NET和C#。我正在生成pdf并使用

在页面加载上发送
response.TransmitFile(file);

所以在此之后我需要关闭这个窗口。我尝试编写动态脚本来关闭,但是没有用。

在按钮上单击我正在使用此代码打开窗口。

window.open("Export.aspx?JobNumbers=" + jobnums,'',"resizable=0,scrollbars=0,status=0,height=200,width=500");

在export.cs的页面加载中我正在使用itextsharp创建pdf。然后使用this来进行缩放。在使用

动态单击的按钮的按钮上调用它。
            string script = "var btn = document.getElementById('" + Button1.ClientID + "');";
            script += "btn.click();";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Eport", script, true);

这是按钮的onclick事件。

           protected void StartExport(object sender, EventArgs e)
           {
            response.Clear();
            response.ContentType = "application/pdf";
            response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(strFilePath));
            response.TransmitFile(strFilePath);
            response.Flush();  
           }

在此之后,我需要关闭此export.aspx窗口,因为我使用了这个。

Page.ClientScript.RegisterStartupScript(this.GetType(), "Export", "window.onfocus=function(){window.close();}", true);

HttpContext.Current.Response.Write("<script>window.onfocus=function(){window.close();}</script>");

但没效果。

有可能吗?

4 个答案:

答案 0 :(得分:1)

你应该尝试这样的事情:

<script>
    $.get('/call/the/page.aspx'); // Send a request to the page from which you Transmit the file

    window.setTimeOut(function() { window.close(); }, 5000);
</script>

这将在5秒后尝试关闭窗口,留下足够的时间开始下载。

你必须将它放在一个页面中,在弹出窗口中打开该页面,这样这个脚本就会执行,请求文件并自行关闭。

答案 1 :(得分:1)

在body标签html上你必须设置event unload =&#34; window.close()&#34; 。这对我有用

答案 2 :(得分:0)

我建议写一个HttpHandler:

/// <summary>
/// here is your server-side file generator
/// </summary>
public class export : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // get some id from query string
        string someid = context.Request.QueryString["id"];

        try
        {
            ...

            context.Response.ContentType = "application/pdf";
            context.Response.HeaderEncoding = System.Text.Encoding.UTF8;
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=filename.pdf");

            context.Response.Write(yourPDF); 
            /* or context.Response.WriteFile(...); */

        }
        catch (Exception ex)
        {
            /* exception handling */
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

不要忘记在Web.config中注册它:

<system.webServer>
    <handlers>
        <add name="/export_GET" path="/export" verb="GET" type="YourNamespace.export" preCondition="integratedMode,runtimeVersionv4.0" resourceType="Unspecified" />
    </handlers>
</system.webServer>

之后你只需要从这样的javascript调用这个处理程序:

ExportFile: function () {

    ...

    var url = "http://" + window.location.hostname + ":4433/export?cid=" + id;

    window.open(url);
}

它将显示您保存对话框而无需手动关闭新窗口(它将自动关闭)。

答案 3 :(得分:-1)

由于显然您无法关闭由于下载文件而导致浏览器创建的窗口(如下载文件列表/是否要打开提示)我假设问题是“如何关闭托管页面初始化了“获取PDF”操作。

由于页面无法知道文件下载的完成情况,如果下载完成,您可能需要询问服务器(即AJAX erquest) - 它需要一些服务器端代码来跟踪下载(并且您可能需要无法使用会话状态来存储下载状态,因为它将被锁定以用于其他请求)。当您确认下载完成后,您可以关闭窗口。请注意,用户打开的关闭窗口要么失败,要么至少显示出“你真的想要关闭”的确认......