在 Response.End() 后执行其余代码替代方案?

问题描述 投票:0回答:1

我有以下代码从提供的数据表生成 Excel 工作表,我修改它以生成两个 Excel 工作表。

  if (dt.Rows.Count > 0)
                            GenerateExcelSheet(dt);
                        if (dtSplit.Rows.Count > 0)
                            GenerateExcelSheet(dtSplit);



private void GenerateExcelSheet(DataTable dt)
        {
            string fileName = string.Format("Foodlist-{0}.xls", DateTime.Now.ToString("ddMMMyyyy-hh:mm:tt"));
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
            Response.ContentType = "application/ms-excel";

           //Code
 Response.Write("<table>");

            //My code goes here

            Response.Write("</table>");

            Response.End();
        }

从上面的代码GenerateExcelSheet(dt);正在执行并下载文件但是

if (dtSplit.Rows.Count > 0)
并且其余代码未执行。经过研究我发现 Response.End();导致当前页面的执行结束。有什么办法可以克服这个问题吗?

c# asp.net httpresponse
1个回答
-1
投票

Response.End()方法终止当前页面的执行,这就是为什么它后面的代码不被执行。也许您可以添加一个标志来跟踪 Excel 数据是否已生成并发送到客户端。我的意思是;

// Flag to track whether Excel data has been generated
bool excelGenerated = false;

if (dt.Rows.Count > 0)
{
    GenerateExcelSheet(dt);
    excelGenerated = true;
}

if (dtSplit.Rows.Count > 0)
{
    GenerateExcelSheet(dtSplit);
    excelGenerated = true;
}

// Only call Response.End() if Excel data has been generated
if (excelGenerated)
    Response.End();


private void GenerateExcelSheet(DataTable dt)
{
    string fileName = string.Format("Foodlist-{0}.xls", DateTime.Now.ToString("ddMMMyyyy-hh:mm:tt"));
    Response.ClearContent();
    Response.Buffer = true;
    Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
    Response.ContentType = "application/ms-excel";

    //Code
    Response.Write("<table>");

    //My code goes here
    
    Response.Write("</table>");
}
© www.soinside.com 2019 - 2024. All rights reserved.