我在页面上有一个按钮。单击按钮会将我重定向到新的加载页面,该页面每秒检查一次特定的缓存数据,因为单击此按钮还会触发存储过程,该存储过程在单独的线程上启动,并且结果存储在缓存中。
加载页面如下:
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文件。有什么办法可以解决?