在Response.End之后,TransmitFile继续使用page_load

时间:2012-07-18 10:09:39

标签: asp.net pageload transmitfile

我一直在寻找一个星期的答案而且我放弃了。 我正在创建一个excelfile,然后让用户使用TransmitFile将其下载到他的客户端。 问题是,这在大多数情况下都能正常工作,但在某些情况下(可以重复),在Response.End之后,页面重新加载并调用page_load。标志IsPostBack为false。 此行为会中断下载并且整个应用程序停止工作,显示连接到服务器。

foreach (string filename in Directory.GetFiles(WebConfigurationManager.AppSettings.Get("EXCEL_PATH")))
{
    if (File.GetLastWriteTime(filename) < (DateTime.Now.AddDays(-1)))
    {
        File.Delete(filename);
    }
}
ClsOrderFormData ofData = new ClsOrderFormData(ddOrderTypes.SelectedValue, OF.Customer.CustomerCategory);

ClsExportOF xls = new ClsExportOF(OF.SizeDims, ofData, OF.Customer, Request.PhysicalApplicationPath, ClsPrintOrder.getOrderData().TheOrder.Articles);
string sFileName = xls.CreateExcelFile();
FileInfo OutFile = new FileInfo(WebConfigurationManager.AppSettings.Get("EXCEL_PATH") + sFileName);
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=Abacus_OF_" + ddOrderTypes.SelectedItem.Text + "_" + ddCustomer.SelectedItem.Text + "_" + DateTime.Now.ToShortDateString() + ".xls".Replace(',', '-'));
Response.ContentType = "application/vnd.ms-excel";
Response.TransmitFile(WebConfigurationManager.AppSettings.Get("EXCEL_PATH") + sFileName, 0, OutFile.Length);
Response.Flush();
Response.End();

简而言之。当它工作时,不再按照预期在Response.End()之后执行代码。如果它不起作用,继续使用page_load等,并且站点挂起。

任何提示?

1 个答案:

答案 0 :(得分:0)

尝试使用HttpApplication.CompleteRequest而不是Response.End。 Response.End可能抛出一个ThreadAbortException,这会搞乱这个过程。

...看到 http://ardalis.com/Use-HttpApplication.CompleteRequest-Instead-of-Response.End http://weblogs.asp.net/hajan/archive/2010/09/26/why-not-to-use-httpresponse-close-and-httpresponse-end.aspx