Response.End()抛出一个错误

时间:2013-06-24 07:33:31

标签: asp.net

在我的应用程序中,我需要下载一个文件,所以我正在使用这段代码:

 Response.ContentType = "application/octet-stream";                    
 Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls");
 Response.TransmitFile(strFilePath);
 Response.End();

Response.End()我收到错误ThreadAbortException

为避免此错误,我尝试使用httpApplication.CompleteRequest(), 但我也无法使用它。

httpApplication.CompleteRequest()的代码如下,

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls");
Response.TransmitFile(strFilePath);
HttpApplication.CompleteRequest();

当我使用HttpApplication.CompleteRequest()

时出现此错误
An object reference is required for the non-static field, method, or property 'System.Web.HttpApplication.CompleteRequest()'

我希望我能够清楚地表达我的怀疑...... 帮帮我....

5 个答案:

答案 0 :(得分:6)

Response.End()预计会抛出ThreadAbortException 这是设计使然,因此不会处理页面响应的其余部分。

获得此异常是完全可以的,它将确保页面不会被进一步处理。

参考:HttpResponse.End

  

CompleteRequest方法不会引发异常,并在之后编码   可能会执行对CompleteRequest方法的调用。如果你的   意图是避免执行后续代码,如果是   End的性能惩罚是可以接受的,你可以调用End而不是   CompleteRequest。

答案 1 :(得分:3)

试试这段代码:

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls");
Response.TransmitFile(strFilePath);
HttpContext.Current.ApplicationInstance.CompleteRequest();

答案 2 :(得分:0)

只需评论这一行就可以了:

//Response.End();

它对我有用:)

答案 3 :(得分:0)

由于您使用的是ASP更新面板或使用JavaScript的任何控件,因此会发生错误。尝试在没有JavaScript或ScriptManager或脚本的情况下使用ASP或HTML中的本机控件。

答案 4 :(得分:0)

我遇到过这个问题并使用以下代码解决了这个问题

ScriptManager sm = ScriptManager.GetCurrent(this.Page);
              sm.RegisterPostBackControl(this.grid);