2009-02-06 12 views
7

Sto tentando di visualizzare un'immagine di caricamento in corso di aggiornamento ogni volta che il mio pannello di aggiornamento fa la cosa Ajax. Ho dato un'occhiata ai tutorial e sembra davvero semplice ma non ho fortuna. Qui è più o meno quello che ho ...Impossibile ottenere ASP.Net UpdateProgress per visualizzare

<div id="panelWrapper"> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:UpdateProgress ID="TaskUpdateProgress" runat="server" DynamicLayout="False" AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="0"> 
      <ProgressTemplate> 
       <asp:Image ImageUrl="~/Images/ajax-loader.gif" Width="16px" Height="16px" runat="server" ID="TaskLoadingImage"/> 
      </ProgressTemplate> 
     </asp:UpdateProgress> 

     <div id="UrlDiv" class="URLNotification"> 
      <asp:Label ID="UrlLabel" runat="server" Text="URL:" AssociatedControlID="Url" /> 
      <asp:HyperLink ID="Url" runat="server" Text="Click &quotGenerate" to create the URL." /> 
     </div> 

     <br /> 

     <asp:CheckBoxList runat="server" ID="IncludeItems" TextAlign="Right"> 
      <asp:ListItem Selected="True">Include 1</asp:ListItem> 
      <asp:ListItem Selected="True">Include 2</asp:ListItem> 
     </asp:CheckBoxList> 

     <br /> 

     <div id="buttons" style="display:inline;"> 
      <asp:Button ID="Generate" runat="server" OnClicked="Generate_Clicked" Text="Generate" /> 
      <asp:Button ID="Add" runat="server" OnClientClick="add();" Text="Add"/> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Ho anche qualche styling posizionamento assoluto in un foglio di stile. Ho provato un sacco di varianti di ciò che vedi qui e non ho trovato molte buone informazioni su quale potrebbe essere il problema. Qualche idea? Se hai bisogno di altro fammelo sapere.

EDIT: L'unica nuova informazione che ho trovato è che ...

"Nei seguenti scenari, il controllo UpdateProgress non viene visualizzata automaticamente:

Il controllo UpdateProgress è associato a una specifica pannello di aggiornamento, ma il postback asincrono risulta da un controllo che non si trova all'interno del pannello di aggiornamento

Il controllo UpdateProgress non è associato a nessun controllo UpdatePanel e il postback asincrono non risulta da un controllo che non si trova all'interno di un UpdatePanel e non è un grilletto. Ad esempio, l'aggiornamento viene eseguito nel codice. "

Sono abbastanza sicuro che nessuno di questi si adatti al mio caso. Tutto ciò che sta accadendo è che il pulsante (che si trova all'interno del pannello di aggiornamento) viene cliccato chiamando un codice dietro il quale set il testo URL essere ricaricato per il pannello di aggiornamento.

+1

Si noti che il controllo UpdateProgress ha un parametro DisplayAfter che specifica un tempo in millisecondi che deve trascorrere prima che il suo contenuto venga visualizzato. Di default sono 500 millisecondi, quindi se l'operazione Ajax è più veloce di quella (e molti lo sono), non vedrai alcun indicatore di progresso. Per verificare ciò, è possibile introdurre un ritardo nell'elaborazione lato server utilizzando Threading.Thread.Sleep (1000) che si ritarderà per 1 secondo. Quindi si dovrebbe visualizzare il contenuto dell'aggiornamento dell'aggiornamento. Vedi https://blogs.msdn.microsoft.com/kashif/2006/11/08/updateprogress-control-in-asp-net-ajax/ –

risposta

2

Credo di aver capito che cosa stava succedendo. il problema non era con niente Stavo sbagliando con UpdateProgress o Panel. Avevo altre cose da caricare in background che sembravano contenere l'Ajaxyness di UpdatePanel

Quindi, in pratica, ciò che è successo è che l'icona di caricamento non viene visualizzata sul caricamento iniziale della pagina. L'ho capito perché in effetti ho aspettato fino a dopo che tutto nella pagina è stato completamente caricato per sparare il pulsante. Abbastanza sicuro che il caricatore si presentò.

Supponevo che l'aggiornamento del riquadro di aggiornamento sarebbe stato richiesto almeno nell'istante in cui l'evento click è stato ascoltato, quindi l'icona del caricatore mostrerebbe immediatamente durante il caricamento di altre cose. Questo non sembra essere il caso però ...

4

non mettere il controllo di aggiornamento di avanzamento all'interno del pannello di controllo di aggiornamento

+1

Grazie per la risposta veloce, ma ho già percorso quel percorso e Ho appena provato di nuovo a ricontrollare. Ancora non fortuna. Anche la pagina degli esempi di asp.net per UpdateProgress dice che "È possibile inserire i controlli UpdateProgress all'interno o all'esterno dei controlli UpdatePanel." – Carter

+0

hmm, hai provato a togliere il controllo dell'immagine e hai inserito del testo statico per assicurarti che il percorso dell'immagine sia corretto? – Element

4

Ho anche lo stesso problema con UpdateProgressPanel. Ho scoperto che quando hai inserito un UpdateProgressPanel e l'hai associato ad un UpdatePanel, qualsiasi postback da quel UpdatePanel causerà la visualizzazione di UpdateProgressPanel.

Un altro trucco da fare è rimuovere il parametro AssociatedUpdatePanel se si dispone di un singolo UpdatePanel nella pagina, questo farà sì che UpdateProgressPanel mostri ogni PostPack Async che si verifica.

UpdateProgressPanel può essere inserito in qualsiasi parte del codice, ad eccezione delle aree su cui sono presenti tag predefiniti. Può essere collocato all'interno o all'esterno di UpdatePanel e mostrerà se hai inserito correttamente il suo CSS, associato ad un UpdatePanel o semplicemente posto lì e verrà visualizzato se si verifica un risultato postback asincrono.

2

Ho avuto davvero molto tempo dopo la conversione del mio progetto da VS2008 a VS2010.UpdateProgress ha smesso di funzionare all'improvviso, il che andava bene in VS2008. Passando un intero pomeriggio a cercare la risposta e sperimentando questo e quello, finalmente ho trovato cosa è andato storto da Scott Gu's posting.

Era una voce web.config generata automaticamente 'xhtmlConformance mode = "Legacy"'.

Dopo aver disabilitato questo, ha iniziato a funzionare di nuovo. Potrebbe non essere il tuo caso, ma solo per ragazzi alle prese con lo stesso problema.

Felice di codifica

4

Assicurarsi che l'UpdateProgress 'DisplayAfter' è impostato fino a 1000 (1 sec)

+0

DisplayAfter era ciò che mancava nel mio caso. Ho il pannello di avanzamento dell'aggiornamento nel pannello di aggiornamento e funziona perfettamente. Grazie per il suggerimento –

+1

intendi 1000 per 1 secondo. –

-1
Create a new ASP.NET Ajax-Enabled Web Site and then paste these code in ascs and aspx file. Run it and you can see the update progress. You can use animated gif files too to show the progress... 

ascx Page 
====================================================== 
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>UpdateProgress control</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
     <asp:UpdateProgress runat="server" id="PageUpdateProgress" AssociatedUpdatePanelID="Panel"> 
      <ProgressTemplate> 
       Loading... 
      </ProgressTemplate> 
     </asp:UpdateProgress> 
     <asp:UpdatePanel runat="server" id="Panel"> 
      <ContentTemplate> 
       <asp:Button runat="server" ID="UpdateButton" OnClick="UpdateButton_Click" Text="Update" /> 
      </ContentTemplate> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="UpdateButton" EventName="Click" /> 
       </Triggers>    
     </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

aspx Page 
====================================================== 
protected void UpdateButton_Click(object sender, EventArgs e) 
{ 
    System.Threading.Thread.Sleep(5000); 
} 
+0

Questa risposta non aiuta a risolvere il problema –

1

Ho anche avuto un problema con l'UpdateProgress non mostrare. Il postback sul server era in realtà così veloce che non ha mai avuto il tempo di mostrarlo. L'aggiunta di un Thread.Sleep (10000) ha aiutato a mostrare il problema.

Problemi correlati