Я тоже боролся с этой же проблемой, и мне посчастливилось наткнуться на Обзор управления UpdateProgress на MSDN . Пример на этой странице показывает secret javascript для подключения к асинхронным вызовам ajax элемента управления ASP UpdatePanel. С небольшой модификацией я смог заставить подключаемый модуль jQuery BlockUI работать с ASP UpdatePanel.
Вот чем я закончил. Здесь должно быть достаточно, чтобы вы могли делать все, что захотите, когда начинается асинхронный обратный вызов и когда он заканчивается.
HTML
<asp:UpdateProgress runat="server" id="updateProgress1" AssociatedUpdatePanelID="UpdatePanel1" DynamicLayout="false" DisplayAfter="0">
<ProgressTemplate>Processing...</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<!-- Some stuff here -->
</ContentTemplate>
</asp:UpdatePanel>
JAVASCRIPT
$(document).ready(function () {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
function InitializeRequest(sender, args) {
// Whatever you want to happen when the async callback starts
$.blockUI();
}
function EndRequest(sender, args) {
// Whatever you want to happen when async callback ends
$.unblockUI();
}
});
Обратите внимание, что я включил элемент управления ASP UpdateProgress, это важно, потому что, если у вас его нет, JavaScript не работает должным образом. Он будет блокировать и разблокировать пользовательский интерфейс, но часть разблокировки не происходит при возврате обратного вызова, это происходит почти сразу после запуска асинхронного вызова.