我有一个页面,behaviorAnalysis.aspx,它调用了一个javascript来完成两件事:1)显示一个带有请等待消息的模态对话框; 2)通过jQuery创建一个iFrame并调用第二个页面,behaviorAnalysisDownload.aspx:
function isMultiPageExport(exportMedia) {
waitingDialog.show("Building File<br/>...this could take a minute", { dialogSize: "sm", progressType: "warning" });
var downloadFrame = document.createElement("IFRAME");
if (downloadFrame != null) {
downloadFrame.setAttribute("src", 'behaviorExport.aspx?exportType=html&exportMedia=' + exportMedia);
downloadFrame.style.width = "0px";
downloadFrame.style.height = "0px";
document.body.appendChild(downloadFrame);
}
}
第二页是使用以下代码段下载Excel文件:
//*****************************************
//* Workbook Download & Cleanup
//*****************************************
MemoryStream stream = new MemoryStream();
wb.Write(stream);
stream.Dispose();
var xlsBytes = stream.ToArray();
string filename = "Behavior Stats YTD.xlsx";
MemoryStream newStream = new MemoryStream(xlsBytes);
if (Page.PreviousPage != null)
{
HiddenField exp = (HiddenField)Page.PreviousPage.FindControl("hidDownloadStatus");
exp.Value = "Complete";
}
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + filename);
HttpContext.Current.Response.BinaryWrite(xlsBytes);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
正如您所看到的,我希望在推送下载之前更新呼叫页面上的隐藏字段;但是,PreviousPage为null。我可以使用另一种方法来更新调用页面中的隐藏字段值,behaviorAnalysis.aspx?
答案 0 :(得分:0)
是否有任何理由要通过创建iframe来提供cliend端的文件?您可以在同一页面上直接调用服务器端方法。
另一种可能性是订阅iframe onload事件并在那里设置隐藏值(客户端)。
for file in /path/to/files/*
do
echo "`sort -u $file`" > $file
done
答案 1 :(得分:0)
在第二页添加: -
C:\Users\bin\ruby\test_folder>ruby opt.rb -t hello
Hello hello
C:\Users\bin\ruby\test_folder>ruby opt.rb -t
opt.rb:7:in `<main>': missing argument: -t (OptionParser::MissingArgument)
C:\Users\bin\ruby\test_folder>
然后尝试让我知道这是否有效。
答案 2 :(得分:0)
我首先会推荐这个jQuery库,它可以完成你想要的后台下载和模式,但它已经过跨浏览器测试,并且已经有很多neato功能可用:http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/
如果您不喜欢这样,您可以采用与该插件相同的方法。不要试图在父级上设置HiddenField的值,只需添加一个cookie:
Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });
在您的第一页附加iFrame之后,只需使用setInterval()检查该Cookie是否存在,例如:
if (document.cookie.indexOf('fileDownload') > -1) {
document.cookie = 'fileDownload=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;' // remove cookie
// it was a success, so do something here
}
当然,你想要设置某种超时或逻辑来处理错误,但这应该涵盖它的基础知识。