Захват события перезагрузки / завершения запроса после перенаправления сервера в файл загрузки - PullRequest
2 голосов
/ 31 марта 2010

Внутри веб-страницы у меня есть кнопка загрузки Excel, которая перенаправляет на веб-страницу, которая обслуживает запрошенный файл Excel через тип application/ms-excel MIME, что обычно приводит к загрузке файла в браузере.

На веб-странице у меня есть следующий код jQuery:

$(document).ready(function () {
    $(".div-export .button").click(function () { setBusy(true); });
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () { 
        setBusy(false);
    });
});

Показывает занятую анимацию, пока пользователь ожидает обработки файла Excel.

Проблема: анимация не заканчивается (setBusy(false);) после загрузки файла, поскольку событие endRequest не запускается, возможно, из-за перенаправления сервера.

У кого-нибудь есть обходной путь для этого?

Редактировать : кнопка загрузки обрабатывается в UpdatePanel.

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

Вместо использования перенаправления сервера, я решил использовать перенаправление документов javascript, которое срабатывает после сброса курсора мыши. Для этого я включил скрытое поле, содержащее URL:

<asp:HiddenField id="hidExportUrl" runat="server" EnableViewState="false" />

Который обрабатывается обработчиком end_request на стороне клиента:

$(document).ready(function () {
    $(".div-export .button").click(function () { setBusy(true); });

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () { 
        setBusy(false);

        var url = $("[id$='hidExportUrl']").val();

        if (url && url != "") {
            $("[id$='hidExportUrl']").val("");
            window.location = url;
        }
    });
});
0 голосов
/ 31 марта 2010

Если, например, у вас есть всплывающее окно, определено:

var myWindow = window.open("/MyPopup.aspx, "myWindow",
"height=550,width=780,top=100,left=100"); 

Попробуйте что-то вроде:

$(myWindow).bind('unload', function(){setBusy(false)}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...