Response.WriteFile停止上一个请求

时间:2010-12-28 22:25:51

标签: c# asp.net

我有一个按钮,可以调用点击事件来下载图片。在我的点击事件中,我有一些代码可以在弹出“保存”对话框时更改我的显示。我遇到的问题是,当对话框出现时,它会停止执行上一行代码。在调用函数之前,如何检查我的代码是否已执行?

这是我的按钮事件处理程序和函数:

 protected void btnSave_Click(object sender, EventArgs e)
{
    var _title          = txtTitle.Text;
    txtTitle.Text       = string.Empty;
    txtDescription.Text = string.Empty;

    ChangeDisplay();

    if (Request.Browser.Browser == "IE")
        lblSnapShot.Visible = (lblSnapShot.Visible) ? false : true;

    SaveSnapShot(_title);
}

void SaveSnapShot(string _title)
{
    try
    {
        FileInfo _fileToDownload = new FileInfo(_path);
        Response.Clear();
        Response.ContentType = "image/png";
        Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + _title + ".png\"");
        Response.WriteFile(_fileToDownload.FullName);

        HttpContext.Current.ApplicationInstance.CompleteRequest();
    }
    catch (System.Exception ex)
    {
        ChangeDisplay();

        if (Request.Browser.Browser == "IE")
            lblSnapShot.Visible = (lblSnapShot.Visible) ? false : true;

        Response.Write("SAVE FAILED \n Error: " + ex.Message);
    }
}

1 个答案:

答案 0 :(得分:2)

Response.WriteFile不会停止处理其他代码(在你调用WriteFile之前代码就是这样,怎么可能呢?)

但是,您的SaveSnapshot方法正在向浏览器发送图像,而不是通常的HTML响应。对于浏览器的每个请求,您只能发送一个响应 - 您无法同时发回图像文件和更新HTML。