2016-08-05 2 views
1

У меня есть проблема с модальным закрытием ... Так что я эта кнопка btnReportingExport, который находится внутри модальногоЗакрыть модальное перед тем Response.Flush - C#

<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, что делает нагрузок вещи, принимая данные из SQL, поставив его на Excel, конвертировать в PDF, сжать и положить его в ответ Похоже, что это ...

Response.Clear(); 
Response.ContentType = "application/x-zip-compressed"; 
Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename=\"{0}.zip\"", QuestionnaireName)); 

Response.WriteFile(FilePathZip); 

Так что Я хотел бы достичь, но терпеть неудачу, чтобы закрыть модальный с .gif на нем, прямо перед тем, как смывать мой ответ ... и я понятие не как сделать его больше

ScriptManager.RegisterStartupScript(this, this.GetType(), 
            "CloseModal", "Closepopup();", true); 

Response.Flush(); 

Closepopup функции не только просто функция, которая делает

function Closepopup() { 
    $('#GenerateReport_modal').modal('hide'); 
} 

Итак, после этой длинной поездки код, моя проблема появляется, я получаю диалоговое окно файла загрузки, а мой модальный все еще работает и работает в фоновом режиме. И я все из идей, как это исправить, как я могу скрыть модальный код, прежде чем делать Response.Flush()?

Спасибо за помощь, и я извиняюсь за стену текста

ответ

2

Интересный сценарий, я хотел бы вам попробовать следующее решение: назвать почтовый файл конечной точки через запрос Ajax с помощью JQuery (вы можете сделать это также с ванильный 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: запрос готов и ответ готов

Я считаю, что когда вы получите этот статус 4, диалог откроется в одно и то же время, и вы можете закрыть всплывающее окно.

+0

Огромное вам спасибо, я понимаю, что это правильный способ сделать это ... но мое знание AJAX плохо для того, чтобы выполнить его таким образом ... с небольшой помощью от @JABFreeware я понял способ создайте файл cookie, который будет проверяться после создания отчета, после изменения значения cookie. Я закрываю модальный файл и уничтожаю куки-файл и останавливаю интервал проверки – Veljko89