Разблокировать пользовательский интерфейс с помощью jQuery BlockUI Plugin после появления диалогового окна Open / Save As - PullRequest
1 голос
/ 05 августа 2010

Я использую jQuery BlockUI Plugin , чтобы показать сообщение о занятости при срабатывании события щелчка.

В приведенном ниже сценарии все работает нормально. Сообщение о занятости показывает и блокирует пользовательский интерфейс при событии щелчка и исчезает после завершения обратной передачи.

Нет создания файла, который вызывает диалоговое окно браузера Open / Save As

Наценка:

$(function() { // when document has loaded

    ($.unblockUI); //unlock UI

    //Show busy message on click event and disable UI
    $('#btnDemo').click(function() {
    $.blockUI({ message: '<h3>Please wait...</h3>' });

    });

});

<asp:Button ID="btnDemo" runat="server" Text="Hello World" /><br/>

Код:

   Protected Sub btnDemo_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDemo.Click
        Label1.Text = "Hello World"
        Threading.Thread.Sleep(6000)
    End Sub

Теперь возникает проблема . Это связано с созданием файла и вызывает диалоговое окно браузера Открыть / Сохранить как. Сообщение о занятости показывает и блокирует пользовательский интерфейс при событии щелчка, но не исчезает и не разблокирует пользовательский интерфейс, когда выполняется обратная передача и пользователь сохраняет файл.

Наценка:

$(function() { // when document has loaded

    ($.unblockUI); //unlock UI

    //Show busy message on click event and disable UI
    $('#btnCreateFile').click(function() {
    $.blockUI({ message: '<h3>Please wait...</h3>' });

    });

});

<asp:Button ID="btnCreateFile" runat="server" Text="Create File" /><br/>

Код-за:

   Protected Sub btnCreateFile_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCreateFile.Click

    Dim filename As String = "demo.xls"
    Response.ContentType = "application/vnd.ms-excel"
    Response.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", filename))
    Response.Clear()

    Response.[End]()

    End Sub

Я хочу избавиться от сообщения «занято» и разблокировать интерфейс при появлении диалогового окна «Открыть / Сохранить как».

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Javascript:

$(document).ready(function () {
    $('#create_pdf_form').submit(function () {
      blockUIForDownload();
    });
  });

  var fileDownloadCheckTimer;
  function blockUIForDownload() {
    var token = new Date().getTime(); //use the current timestamp as the token value
    $('#download_token_value_id').val(token);
    $.blockUI();
    fileDownloadCheckTimer = window.setInterval(function () {
      var cookieValue = $.cookie('fileDownloadToken');
      if (cookieValue == token)
       finishDownload();
    }, 1000);
  }

ServerSide:

var response = HttpContext.Current.Response;
response.Clear();
response.AppendCookie(new HttpCookie("fileDownloadToken", downloadTokenValue); //downloadTokenValue will have been provided in the form submit via the hidden input field
response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", desiredFileName)); //desiredFileName will be whatever the resutling file name should be when downloaded

//Code to generate file and write file contents to response

response.Flush();

Вот ссылка на разрешение.

http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

br, Jernej

0 голосов
/ 05 августа 2010

Я задавал те же вопросы здесь: Разблокировать (jQuery BlockUI) после отправки файла в браузер через поток ответов (без ответов).

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

В большинстве учебных пособий предлагается создать файл и перенаправить клиента на «страницу загрузки».Вы можете потенциально сделать все это через iFrame.Итак, выполните обратную передачу, сгенерируйте файл, настройте jquery на клиентском сайте для запуска на document.ready, чтобы создать iFrame с src скажем: /downloadFile.aspx?fileID=blah

Диалог все равно должен появиться как обычноно теперь вы можете контролировать разблокировку пользовательского интерфейса.

...