在Response.Flush之前关闭模态 - C#

时间:2016-08-05 22:26:14

标签: javascript c# twitter-bootstrap

关于模态关闭我有问题... 所以我在模态

中有这个按钮<div id="Reporting_footer" class="modal-footer"> <asp:Button ID="btnReportingExport" runat="server" Text="Export" CssClass="btn btn-default" OnClientClick="ChangeModalFunction();" OnClick="btnReportingExport_Click"/> <input id="Submit1" class="btn btn-default" type="submit" data-dismiss="modal" value="Cancel" /> </div>
ChangeModalFunction

该按钮首先调用看起来像这样的JS函数function ChangeModalFunction() { $('#Reporting_modal').modal('hide'); $('#GenerateReport_modal').modal('toggle'); }

.gif

所以我只是隐藏模态并显示另一个模态,其上只有一些btnReportingExport_Click动画来生成报告。之后我的主要事件发生Response.Clear(); Response.ContentType = "application/x-zip-compressed"; Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}.zip\"", QuestionnaireName)); Response.WriteFile(FilePathZip); ,它执行大量的工作,从SQL获取数据,将其放在Excel上,转换为PDF,压缩并将其放入响应中 它看起来像这样......

.gif

所以我想要完成的,但失败的是在我刷新我的回复之前用ScriptManager.RegisterStartupScript(this, this.GetType(), "CloseModal", "Closepopup();", true); Response.Flush(); 关闭模态......我不知道怎么做了

Closepopup

function Closepopup() { $('#GenerateReport_modal').modal('hide'); } 函数只是简单的函数

Response.Flush()

因此,经过长时间的代码旅行,我的问题出现了,我得到了下载文件对话框,我的模态仍然在后台启动并运行。我完全没有想法如何修复它,如何在执行Stack<Object> stack; stack.push(first_object); while( !stack.isEmpty() ) { // Do something my_object = stack.pop(); // Push other objects on the stack. } 之前隐藏代码中的模态?

感谢您的帮助,我为文字墙道歉

1 个答案:

答案 0 :(得分:2)

有趣的场景,我希望您尝试以下解决方案: 使用jquery通过ajax请求调用您的zip文件端点(您也可以使用vanilla javascript)。然后将此事件onreadystatechange绑定到您的请求。

$(".submitButton").click(function(){
    var xhr  = $.ajax({url: "/data.zip",
     success: function(result){

    }});
    xhr.onreadystatechange = function() { 
        if(xhr.readyState === 4)
            Closepopup();
    };
});

此事件将触发5种不同的状态:

  1. 0:请求未初始化
  2. 1:已建立服务器连接
  3. 2:收到请求
  4. 3:处理请求
  5. 4:请求已完成且响应已准备就绪
  6. 我相信当您获得此状态4时,对话框将同时打开,您可以关闭弹出窗口。