2009-02-06 18 views
7

Estoy tratando de mostrar una imagen de carga de progreso de actualización cada vez que mi panel de actualización lo hace Ajax. He buscado tutoriales y parece muy sencillo, pero no tengo suerte. Aquí es más o menos lo que tengo ...No se puede obtener ASP.Net UpdateProgress para mostrar

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

también tengo algo de estilo posicionamiento absoluto en una hoja de estilo. He intentado varias variaciones de lo que ves aquí y no he encontrado mucha información buena sobre cuál puede ser el problema. ¿Algunas ideas? Si necesitas algo más házmelo saber.

EDIT: La única información nueva que he encontrado es que ...

"En los siguientes casos, el control UpdateProgress no se mostrará automáticamente:

El control UpdateProgress se asocia con una específica panel de actualización, pero los resultados de la devolución de datos asíncrona de un control que no está dentro de ese panel de actualización

El control UpdateProgress no está asociado con ningún control UpdatePanel, y la devolución de datos asíncrona no resulta de un control que no está dentro de un UpdatePanel y no es un desencadenar Por ejemplo, la actualización se realiza en código. "

Estoy bastante seguro de que ninguna de estas cosas encaja en mi caso. Todo lo que está sucediendo es el botón (que está dentro del panel de actualización) que hace clic en algún código detrás del cual es el texto conjunto de URL que ser recargada para el panel de actualización.

+1

Tenga en cuenta que el control UpdateProgress tiene un parámetro DisplayAfter que especifica un tiempo en milisegundos que debe pasar antes de que se muestre su contenido. De forma predeterminada, es de 500 milisegundos, por lo que si su operación Ajax es más rápida que eso (y muchos lo son), entonces no verá ningún indicador de progreso. Para probar esto, puede introducir un retraso en el procesamiento del lado del servidor utilizando Threading.Thread.Sleep (1000), que se retrasará durante 1 segundo. Luego, debería ver el contenido del progreso de la actualización. Consulte https://blogs.msdn.microsoft.com/kashif/2006/11/08/updateprogress-control-in-asp-net-ajax/ –

Respuesta

2

supongo que me di cuenta de lo que estaba pasando. el problema no era con cualquier cosa Me estaba yendo mal con el UpdateProgress o Panel. Era que tenía otras cosas cargadas en segundo plano que aparentemente estaban reteniendo el Ajaxyness de UpdatePanel.

Entonces, básicamente, lo que sucedió fue que el ícono de carga no aparecía en la carga de la página inicial. Me di cuenta de esto porque en realidad esperé hasta que todo en la página estuviera completamente cargado para disparar el botón. Efectivamente el cargador apareció.

Supuse que la actualización del panel de actualización al menos se solicitaría en el instante en que se oyera el evento de clic para que el icono del cargador se muestre inmediatamente durante el tiempo en que se carguen otras cosas. Sin embargo, este no parece ser el caso ...

4

no coloque el control de actualización de progreso dentro del panel de control de actualización

+1

Gracias por la respuesta rápida, pero ya he pasado por ese camino y Solo intenté nuevamente verificarlo. Todavía no es suerte. Además, la página de ejemplos asp.net para UpdateProgress dice que "puede poner controles UpdateProgress dentro o fuera de los controles UpdatePanel". – Carter

+0

hmm, ¿ha intentado sacar el control de imagen y simplemente poner texto estático para asegurarse de que la ruta de su imagen sea la correcta? – Element

4

También tengo el mismo problema con UpdateProgressPanel. Descubrí que cuando ha colocado un UpdateProgressPanel y lo ha asociado a un UpdatePanel, cualquier devolución de datos desde ese UpdatePanel hará que se muestre UpdateProgressPanel.

Otro truco para hacer es eliminar el parámetro AssociatedUpdatePanel si tiene un solo UpdatePanel en la página, esto hará que UpdateProgressPanel muestre cada Async PostBack que ocurra.

UpdateProgressPanel se puede colocar en cualquier parte del código, excepto aquellas áreas que tienen etiquetas predefinidas. Se puede colocar dentro o fuera de UpdatePanel y se mostrará si ha colocado correctamente su CSS, lo ha asociado a un Panel de actualización o simplemente lo colocó allí y se mostrará si ocurre un resultado de devolución de datos asíncrono.

2

Estaba pasando un momento muy difícil después de convertir mi proyecto de VS2008 a VS2010.UpdateProgress dejó de funcionar de repente, lo cual estaba bien en VS2008. Pasé una tarde entera buscando la respuesta y experimentando esto y aquello; finalmente encontré lo que salió mal al Scott Gu's posting.

Fue una entrada web.config generada automáticamente 'xhtmlConformance mode = "Legacy"'.

Después de deshabilitar esto, comenzó a funcionar nuevamente. Puede que no sea el caso para ti, sino solo para chicos que luchan con el mismo problema.

feliz de codificación

4

Asegúrese de que el UpdateProgress 'DisplayAfter' está configurado para 1000 (1 seg)

+0

DisplayAfter era lo que faltaba en mi caso. Tengo el panel de progreso de actualización dentro del panel de actualización y funciona bien. Gracias por la pista –

+1

te refieres a 1000 por 1 seg. –

-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

Esta respuesta no ayuda a resolver el problema –

1

También tuve un problema con el UpdateProgress no se muestra. Resultó que la devolución de datos al servidor fue realmente tan rápido que nunca tuvo tiempo de mostrarse. Agregar un Thread.Sleep (10000) ayudó a mostrar el problema.

Cuestiones relacionadas