【发布时间】:2019-11-29 11:52:35
【问题描述】:
我有一个名为导出的按钮,单击该按钮会在多个文件夹中创建一个 zip 文件,所以那里没有问题。
问题是我希望,在单击事件发生后,我希望我的(aspx)页面清除,并且屏幕上的按钮也被禁用,并且出现一条消息,表明导出成功。
但只创建了 zip 文件。谁能帮我解决这个问题。
这是我的代码:
protected void btnExport1_Click(object sender, EventArgs e)
{
try
{
DateTime myDateTime = DateTime.Now.ToUniversalTime();
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd");
string directoryPath = @ConfigurationManager.AppSettings["UsageExportPath"] + "UsageExport_" + sqlFormattedDate; // Set Directory Path
string zipFileName = "UsageExport_" + sqlFormattedDate + ".zip"; // Set Zip File Name
createDirectory(directoryPath);
CreateZip(@ConfigurationManager.AppSettings["UsageExportPath"] + zipFileName,
directoryPath);
RemoveDirectory(directoryPath); // Delete Directory.
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition",
"attachment;filename=" + zipFileName);
Response.Charset = "";
Response.ContentType = "application/zip";
lblResult.ForeColor = System.Drawing.Color.Green;
lblResult.Text = "Usage Exported SuccessFully";
exportResultPanel.Visible = true;
usagePanel.Visible = false;
Response.WriteFile(@ConfigurationManager.AppSettings["UsageExportPath"] + zipFileName);
Response.End();
//Response.Redirect("Receipt.aspx", false);
}
【问题讨论】:
-
我怀疑响应标头被发送回浏览器使其认为返回的唯一内容是 zip 文件,并且响应中不包含任何页面更改。我会让 zip 文件下载方法只这样做,用 zip 文件响应。收到该 zip 文件后,网页应自行更新(可能使用 javascript)以更改 UI。
-
是的,如果我删除该邮政编码它可以工作,但我想要这两样东西
-
重点是您不能返回文件和在单个响应中更新 UI。您可以按照以下步骤操作: 1) 创建文件并将其保存在服务器上的临时位置。 2) 以成功/失败响应响应网站,并包含指向临时服务器位置的 URI。 3)使用该位置作为参数发出下载请求(就像您当前拥有的那样),提供文件并在提供文件时删除服务器上的文件。或者,您可以像我之前所说的那样,通过 javascript 更新您的 UI,并且只提供下载。
-
@DanRayson 是的,你可以。请阅读stackoverflow.com/questions/58948957/…
-
@dpant 这个答案是一种非常糟糕的迂回方式,在提供下载响应时包含带有额外数据的响应......虽然您可以在响应中包含带有额外数据的 cookie,这是可取的吗?我觉得很乱。我想我坚持我最初的回答,但我可能会将措辞改为“......你不应该返回两个文件......”最后,它仍然将更新 UI 的 javascript。