2009-02-06 12 views
7

Ich versuche, den Ladevorgang eines Aktualisierungsvorgangs anzuzeigen, wenn mein Update-Panel Ajax-Objekte enthält. Ich habe mir Tutorials angeschaut und es scheint sehr einfach, aber ich habe kein Glück. Hier ist ziemlich viel, was ich habe ...ASP.Net UpdateProgress konnte nicht angezeigt werden.

<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> 

ich auch einige absolute Positionierung Styling in einem Stylesheet haben. Ich habe eine Reihe von Variationen von dem, was Sie hier sehen, ausprobiert und habe nicht viele gute Informationen darüber gefunden, was das Problem sein könnte. Irgendwelche Ideen? Wenn Sie noch etwas brauchen, lassen Sie es mich wissen.

EDIT: Die einzige neue Information, die ich gefunden habe, ist, dass ...

„In den folgenden Szenarien wird die Update Steuerung nicht automatisch angezeigt werden:

Die Updatesteuerung wird mit einem bestimmten zugehörigen Update-Bereich, aber das asynchrone Postback-Ergebnisse von einem Steuerelement, das nicht in diesem Update-Panel ist

Das UpdateProgress Steuerelement ist nicht mit einem UpdatePanel-Steuerelement verknüpft, und das asynchrone Postback resultiert nicht aus einem Steuerelement, das nicht in einem UpdatePanel ist und ist nicht ein auslösen. Zum Beispiel wird das Update in Code durchgeführt. "

Ich bin ziemlich zuversichtlich, dass keiner von diesen in meinen Fall passt. Alles, was geschieht, ist der Knopf (der in der Update-Leiste ist) klicken Sie auf einige Code hinter denen aufgerufen wird Set ist der URL-Text, der für den Update-Panel neu geladen.

+1

Beachten Sie, dass das UpdateProgress-Steuerelement über einen DisplayAfter-Parameter verfügt, der eine Zeit in Millisekunden angibt, die verstreichen muss, bevor der Inhalt angezeigt wird. Standardmäßig sind es 500 Millisekunden. Wenn Ihre Ajax-Operation also schneller ist (und viele), wird kein Fortschrittsindikator angezeigt. Um dies zu testen, können Sie eine Verzögerung in Ihre serverseitige Verarbeitung mit Threading.Thread.Sleep (1000) einführen, die um 1 Sekunde verzögert wird. Dann sollten Sie den Inhalt des Update-Fortschritts sehen. Siehe https://blogs.msdn.microsoft.com/kashif/2006/11/08/updateprogress-control-in-asp-net-ajax/ –

Antwort

2

ich glaube, ich herausgefunden setzen Sie, was los war. das Problem war nicht mit etwas Ich hatte Probleme mit dem UpdateProgress oder Panel. Es war, dass ich andere Sachen in den Hintergrund geladen hatte, die anscheinend die Ajaxyness des UpdatePanels hielten.

Was im Prinzip passiert ist, dass das Ladesymbol beim ersten Laden der Seite nicht angezeigt wurde. Das habe ich gemerkt, weil ich eigentlich gewartet habe, bis alles auf der Seite komplett geladen war, um den Knopf loszulassen. Sicherlich tauchte der Lader auf.

Ich nahm an, dass die Update-Panel-Aktualisierung mindestens in dem Moment angefordert würde, in dem das Click-Ereignis gehört wurde, so dass das Loader-Symbol sofort während der Ladezeit anderer Sachen angezeigt würde. Dies scheint jedoch nicht der Fall zu sein ...

4

nicht die Steuer Update Fortschritts in der Update-Panel Steuerung

+1

Vielen Dank für die schnelle Antwort, aber ich habe diesen Pfad bereits und Ich habe gerade noch einmal versucht, das zu überprüfen. Immer noch kein Glück. Auch die asp.net-Beispielseite für UpdateProgress sagt, dass Sie UpdateProgress-Steuerelemente innerhalb oder außerhalb von UpdatePanel-Steuerelementen platzieren können. – Carter

+0

hmm, haben Sie versucht, die Bildkontrolle herauszunehmen und nur etwas statischen Text einzufügen, um sicherzustellen, dass Ihr Bildpfad korrekt ist? – Element

4

Ich habe auch das gleiche Problem mit dem UpdateProgressPanel. Ich habe herausgefunden, dass, wenn Sie ein UpdateProgressPanel platziert und es einem UpdatePanel zugeordnet haben, jedes Postback von diesem UpdatePanel dazu führt, dass UpdateProgressPanel angezeigt wird.

Ein weiterer Trick ist, den AssociatedUpdatePanel-Parameter zu entfernen, wenn Sie ein einzelnes UpdatePanel auf der Seite haben, dies wird dazu führen, dass das UpdateProgressPanel jedes Async PostBack zeigt, das passiert.

UpdateProgressPanel kann an einer beliebigen Stelle im Code platziert werden, mit Ausnahme der Bereiche, die vordefinierte Tags enthalten. Es kann innerhalb oder außerhalb des UpdatePanels platziert werden und es wird angezeigt, wenn Sie sein CSS korrekt platziert haben, es einem UpdatePanel zugeordnet haben oder es einfach dort platzieren und es wird angezeigt, wenn ein asynchrones Postback-Ergebnis passiert.

2

Ich hatte wirklich harte Zeit nach der Konvertierung meines Projekts von VS2008 zu VS2010.Der UpdateProgress hat plötzlich aufgehört zu arbeiten, was in VS2008 in Ordnung war. Ich verbrachte einen ganzen Nachmittag damit, die Antwort zu suchen und dieses und jenes zu experimentieren. Schließlich fand ich heraus, was von Scott Gu's posting schief gelaufen ist.

Es war ein automatisch generierter web.config Eintrag 'xhtmlConformance mode = "Legacy"'.

Nachdem dies deaktiviert wurde, begann es wieder zu arbeiten. Vielleicht nicht für dich, aber nur für Leute, die mit dem gleichen Problem kämpfen.

Glücklich Codierung

4

sicher, dass die 'DisplayAfter' Update Stellen wird bis 1000 (1 sec)

+0

DisplayAfter war was in meinem Fall fehlte. Ich habe das Update-Fortschrittspanel im Update-Panel und funktioniert gut. Danke für den Hinweis –

+1

du meinst 1000 für 1 sek. –

-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

Diese Antwort hilft nicht, das Problem zu lösen –

1

Ich hatte auch ein Problem mit der Update nicht zeigt. Es stellte sich heraus, dass das Postback auf den Server tatsächlich so schnell war, dass es nie Zeit hatte, es zu zeigen. Das Hinzufügen eines Thread.Sleep (10000) half, das Problem zu zeigen.