为什么重定向在多线程代码中不起作用?

时间:2019-12-13 09:28:01

标签: c# multithreading webforms

我在页面上有一个按钮。单击按钮会将我重定向到新的加载页面,该页面每秒检查一次特定的缓存数据,因为单击此按钮还会触发存储过程,该存储过程在单独的线程上启动,并且结果存储在缓存中。

加载页面如下:

protected void Page_Load(object sender, EventArgs e)
    {
        string dataKey = Request.Params[MovementFilterManager.DATA_KEY_LABEL];
        string filterId = Request.Params["filterId"];

        if (Page.Cache[dataKey] != null)
        {
            if (Request.Params["action"] == "exportRequest")
            {
                string url = String.Format("/wallet/movements/?{0}={1}&filterId={2}&action=excelData", MovementFilterManager.DATA_KEY_LABEL, dataKey, filterId);
                Response.Redirect(url);
            }
            else
            {
                string url = String.Format("/wallet/movements/?{0}={1}&filterId={2}", MovementFilterManager.DATA_KEY_LABEL, dataKey, filterId);
                Response.Redirect(url);
            }
        }
    }

它是这样的: 1.我点击“导出到Excel按钮” 2.我被重定向到加载页面上。 3.Excel已下载。 4.我没有被重定向回主页。即使您,我的代码也说,当将数据写入缓存时(应该将其写入),我应该重定向到电子钱包/移动页面。

“钱包/移动”页面提供了一种下载excel文件的方法。显然有效。

我尝试调试。成功进入主页(钱包/动作),生成excel并下载。

请记住,它仅在存储过程必须从数据库中获取大量数据时发生。在小数据的情况下,它可以工作。含义:我单击主页上的按钮,将我重定向到加载页面,下载了excel,然后将我重定向回主页。

ExportExcel 方法(位于主页上,并在页面加载时调用)

 public static void ExportToExcel(int filterId, List<Coinmania.MoneyMovement> data, HttpResponse response)
    {
        ExcelPackage excel = new ExcelPackage();

        MovementFilter movementFilter = MovementFilterManager.GetFilter(filterId);
        string excelSheetTitle = LabelManager.Get("Movement.ExcelSheetTitle");
        string sheetTitle = movementFilter.ToString(excelSheetTitle);
        ExcelWorksheet workSheet = excel.Workbook.Worksheets.Add(excelSheetTitle);

        workSheet.Row(1).Height = 20;
        workSheet.Row(1).Style.Font.Bold = true;

        workSheet.Cells[1, 1].Value = LabelManager.Get("Movement_InsertDate");
        workSheet.Cells[1, 2].Value = LabelManager.Get("Movement_Amount");
        workSheet.Cells[1, 3].Value = LabelManager.Get("Movement_Currency");
        workSheet.Cells[1, 4].Value = LabelManager.Get("Movement_EntryType");
        workSheet.Cells[1, 5].Value = LabelManager.Get("Movement_Explanation");

        int recordIndex = 2;


        foreach (MoneyMovement item in data)
        {
            workSheet.Cells[recordIndex, 1].Value = item.Date;
            workSheet.Cells[recordIndex, 2].Value = item.Amount;
            workSheet.Cells[recordIndex, 3].Value = item.AssetId;
            workSheet.Cells[recordIndex, 4].Value = item.EntryType;
            workSheet.Cells[recordIndex, 5].Value = item.Explanation;

            recordIndex++;
        }

        string excelTitle = LabelManager.Get("Movement.ExcelTitle");

        string fileName = movementFilter.ToString(excelTitle);
        using (MemoryStream memoryStream = new MemoryStream())
        {
            response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            response.AddHeader("content-disposition", "attachment; filename=" + excelTitle + ".xlsx");
            excel.SaveAs(memoryStream);
            memoryStream.WriteTo(response.OutputStream);
            response.Flush();
            response.Redirect("/wallet/movements/");
            //response.End();
        }
    }

我认为,浏览器需要主页的HTML并获取Excel文件。有什么办法可以解决?

0 个答案:

没有答案