在我的应用程序中,我需要下载一个文件,所以我正在使用这段代码:
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()'
我希望我能够清楚地表达我的怀疑...... 帮帮我....
答案 0 :(得分:6)
Response.End()
预计会抛出ThreadAbortException
这是设计使然,因此不会处理页面响应的其余部分。
获得此异常是完全可以的,它将确保页面不会被进一步处理。
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);