我有一个名为behaviorAnalysis.aspx的页面,该页面正在调用执行以下两项操作的JavaScript:1)显示带有请稍候消息的模式对话框;和2)创建一个iFrame并通过jQuery调用第二个页面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为空。我可以使用另一种方法来更新调用页面中的隐藏字段值behaviorAnalysis.aspx吗?

最佳答案

我首先会推荐这个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
}


当然,您需要设置某种超时或逻辑来处理错误,但这应该涵盖其基本知识。

关于c# - 如何从另一页后面的代码更新一页上的隐藏字段值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37214889/

10-13 00:01