У меня есть некоторая трудоемкая серверная функция, поэтому я стараюсь выполнять каждую функцию шаг за шагом и информировать пользователя о прогрессе.
Итак, мой подход был:
- создать видимую кнопку, которая выполняет асинхронную обратную передачу и обработать событие click на стороне сервера
- выполнить первую функцию
- обновить метку, чтобы сообщить пользователю, была ли функция выполнена успешно
- зарегистрировать javascript, который запускает событие click второй невидимой (
Style="display: none"
) кнопки, которая также зарегистрирована как асинхронный триггер для UpdatePanel
- отправить страницу обратно клиенту и выполнить скрипт для нажатия невидимой кнопки
- обрабатывать нажатие кнопки, информировать пользователя, регистрировать js для третьей невидимой кнопки, выполнять нажатие кнопки и так далее ...
Но проблема в том, что элемент управления UpdateProgress не будет отображаться, хотя я правильно установил AssociatedUpdatePanelID. Все функции запускаются правильно, а метки обновляются, только UpdateProgress остается невидимым.
Посмотрите пожалуйста:
<asp:UpdateProgress ID="UpdateProgress1" DynamicLayout="true" runat="server" AssociatedUpdatePanelID="UpdFormPanel" DisplayAfter="0">
<ProgressTemplate>
<div class="progress">
<asp:Image ID="ImgProgress" runat="server" ImageUrl="~/images/ajax-loader-arrows.gif"
ToolTip="loading..." /> please wait...
</div>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdFormPanel" runat="server" UpdateMode="conditional" ChildrenAsTriggers="false">
<ContentTemplate>
....
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnShowUploadResult" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnExtractFile" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnShowResultView" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnShowUploadResult" runat="server" CausesValidation="false" Text="hidden" Style="display: none" />
<asp:Button ID="btnExtractFile" runat="server" CausesValidation="false" Text="hidden" Style="display: none" />
<asp:Button ID="btnShowResultView" runat="server" CausesValidation="false" Text="hidden" Style="display: none" />
На этом пути я регистрирую JavaScript в обработчике событий нажатия кнопки:
AjaxControlToolkit.ToolkitScriptManager.RegisterStartupScript(Me.UpdFormPanel, GetType(String), "ShowResultView", "$get('" & Me.btnShowResultView.ClientID & "').click();", True)
Заранее спасибо.