UpdateProgress с UpdatePanel - PullRequest
       21

UpdateProgress с UpdatePanel

2 голосов
/ 02 ноября 2010

Я хочу показать UpdateProgress на странице A, когда пользователь нажимает кнопку «Далее», чтобы перейти на следующую страницу.Следующая страница - это страница B, на которой интенсивно загружаются данные.

При нажатии кнопки не отображается UpdateProgress.

Чего не хватает в этом коде и как можноэто должно быть сделано, чтобы показать?

<asp:UpdateProgress ID="UpdateProgress1" runat="Server" AssociatedUpdatePanelID="UpdatePanel1">
    <ProgressTemplate >
       Please wait ...
    </ProgressTemplate>
</asp:UpdateProgress>

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
   <Triggers>
      <asp:AsyncPostBackTrigger ControlID="btnNext" EventName="Click" />
   </Triggers>                                    

   <ContentTemplate>                                          
      <asp:Button ID="btnCancel" runat="server" TabIndex="1" Text="Cancel"onclick="btnCancel_Click" />                                    
      <asp:Button ID="btnNext" runat="server" TabIndex="2" Text="Next" onclick="btnNext_Click" />
   </ContentTemplate>                                 
</asp:UpdatePanel>

Ответы [ 4 ]

5 голосов
/ 02 ноября 2010

Попробуйте установить DisplayAfter на очень маленькое значение, чтобы индикатор прогресса появился сразу, например:

<asp:UpdateProgress ID="UpdateProgress1" runat="Server" AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="1">
3 голосов
/ 02 ноября 2010

Несколько вещей, чтобы попробовать:

1) Переместите элемент управления UpdateProgress внутрь панели обновления

2) Удалите атрибут AssociatedUpdatePanelID из тега UpdateProgress

Я делаю ставку на Вариант 1, выполняя трюк.

EDIT

Вот способ не-ProgressTemplate, использующий обработчики событий на стороне клиента:

<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

function BeginRequestHandler(sender, args)
{
     // some code to show image, e.g:
     document.getElementById('somedivwhichasimage').className = 'show';
}

function EndRequestHandler(sender, args)
{
     // some code to hide image, e.g:
     document.getElementById('somedivwhichasimage').className = 'hidden';
}
</script>
2 голосов
/ 02 ноября 2010

Добавьте этот код к коду позади этой страницы.

 protected void btnNext_Click(object sender, EventArgs e)
 {
     System.Threading.Thread.Sleep(3000);
 }

Надеюсь, это поможет !!

Edit: Перейдите по этой ссылке: http://msdn.microsoft.com/en-us/library/bb386421.aspx

Добавление кода со страницы aspx, который я пробовал и работает,

<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager>

   <asp:UpdateProgress ID="UpdateProgress1" runat="Server" AssociatedUpdatePanelID="UpdatePanel1"> 
    <ProgressTemplate > 
     <asp:Label ID="lblwait" runat="server" Text="Please wait.."></asp:Label>
    </ProgressTemplate> 
</asp:UpdateProgress> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server">  
   <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
   </Triggers>                                     

   <ContentTemplate>                                           
      <asp:Button ID="btnCancel" runat="server" TabIndex="1" Text="Cancel" />                                     
      <asp:Button ID="Button1" runat="server" TabIndex="2" Text="Next" onclick="Button1_Click" /> 
   </ContentTemplate>                                  
</asp:UpdatePanel> 
0 голосов
/ 03 ноября 2010

попробуйте поставить UpdateProgress элемент управления внутри UpdatePanel. и это должно сработать для вас.
надеюсь, что это поможет!

...