我在文件中生成一组字母,但如果有错误,则文件可能不完整。我还是想发送文件,但会向用户发出警告。所以我有这个:
string errMessage;
string filePath = CCGTMarblox.Admin.Helpers.DocumentHelper.GenerateRejectionLetters(grantIDs, out errMessage);
if (!String.IsNullOrEmpty(errMessage))
{
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "problem", String.Format("alert('{0}');", errMessage), true);
}
if (filePath != null)
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", string.Format(@"attachment; filename=""{0}""", fileInfo.Name));
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.TransmitFile(fileInfo.FullName);
Response.Flush();
}
问题是当包含下载文件的代码时没有显示警报 - 标头被清除,就像一个新的响应。有什么办法可以发送脚本和文件吗?我尝试将 Response.Redirect 重定向到检索文件的页面,但这也不起作用。
实际上,我最后所做的是发送另一个启动脚本,该脚本执行与我在问题中尝试的重定向类似的任务。(我已经有一个处理下载的页面)。
编辑(在接受答案后添加)
string script = String.Format("window.location = '{0}';", url);
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "goToDownload", script, true);