如何从另一个页面后面的代码更新一个页面上的隐藏字段值?

时间:2016-05-13 16:20:28

标签: c# asp.net

我有一个页面,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?

3 个答案:

答案 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
}

当然,你想要设置某种超时或逻辑来处理错误,但这应该涵盖它的基础知识。