在回发后执行Javascript并在C#中清除响应

时间:2014-10-17 06:49:23

标签: javascript c# jquery asp.net postback

当用户点击我网站上的按钮时,我会在服务器端创建一个excel文件并将其写入响应中。

HttpResponse httpResponse = Page.Response;
httpResponse.ClearHeaders();
httpResponse.ClearContent();
httpResponse.Clear();
httpResponse.Buffer = true;
httpResponse.AppendHeader("Content-Disposition",
"attachment; " +
"filename=\"" + fileName + "\";");
httpResponse.ContentType = "application/vnd.xlsx";
httpResponse.Charset = "";

using (MemoryStream memoryStream = new MemoryStream())
{
    workbook.SaveAs(memoryStream);
    memoryStream.WriteTo(httpResponse.OutputStream);
    memoryStream.Close();
}

httpResponse.Flush();
httpResponse.End();

当我写完这个文件时,我希望运行一个JavaScript脚本块,但我似乎无法使其工作。我听说当我清除响应时,我不能用Page.ClientScript.RegisterStartupScript编写一个脚本块(不建议使用?),因为用户没有获得与响应相同的页面,但是我希望有一个解决方法。

进行回发并获取文件的按钮不在UpdatePanel中,因此我无法使用在那里实现的PageRequestManager.add_endRequest函数。我无法将控件放入UpdatePanel,因为它不允许我在异步回发中编写文件。

还有其他方法可以在回发结束时触发javascript函数吗?检查回发是否正在进行(或已完成)的JavaScript间隔函数也是一个可接受的解决方案(但据我所知,JavaScript无法“检查”是否正在进行同步回发)。

1 个答案:

答案 0 :(得分:1)

Response.End()中止线程并将执行发送到Application_EndRequest。 之后什么也做不了。您可以下载文件或执行javascript。但是这个解决方案使用iframes