2009-02-11 6 views
0

Est-ce un comportement typique de UpdateProgress pour un UpdatePanel ASP.Net? J'ai un panneau de mise à jour avec le contrôle UpdateProgress à l'intérieur d'une fenêtre de contrôle utilisateur sur une page. Si je fais ensuite le chargement de la page en arrière-plan et que je clique sur un bouton dans le panneau de mise à jour du contrôle utilisateur, UpdateProgress n'apparaît pas du tout. C'est comme si la demande d'actualisation UpdatePanels n'était même pas enregistrée avant que la page proprement dite ne soit terminée. Il est à noter que cela apparaîtra si rien ne se passe en arrière-plan.UpdateProgress avec UpdatePanel n'apparaissant pas dans le contrôle utilisateur lors du chargement de la page

La fonctionnalité que je veux est ce que vous attendez. Je veux que le chargeur apparaisse s'il doit attendre quoi que ce soit pour que l'actualisation se fasse quand on clique sur le bouton.

Je sais que je peux obtenir cette fonctionnalité si j'utilise jquery ajax avec une méthode web statique, mais vous ne pouvez pas avoir de méthodes web statiques dans un contrôle utilisateur. Je pourrais l'avoir dans la page mais ça n'appartient vraiment pas à la page. Un wcf complet ne vaudrait pas vraiment la peine dans ce cas non plus. J'essaie de faire un compromis avec un UpdatePanel mais ces choses semblent toujours me causer des problèmes.

Peut-être que c'est ainsi que ça fonctionne?

Modifier: Donc, je vais clarifier un peu ce que je fais.

Ce qui se passe, c'est que j'ai une page et tout ce qu'elle contient sont des outils sur le côté et une grande carte. Lorsque la page se charge initialement, il faut un certain temps pour charger la carte. Maintenant si pendant le chargement j'ouvre l'outil (un contrôle d'utilisateur) qui a le panneau de mise à jour en question dedans et clique le bouton sur ce contrôle d'utilisateur qui devrait actualiser le panneau de mise à jour avec de nouvelles données et montrer le signe de chargement (dans le updateprogress), l'image de chargement de UpdateProgress n'apparaît pas. Toutefois, le code exécuté par le clic sur le bouton s'exécute après le chargement de la page (comme prévu) et le programme UpdateProgress s'affiche si rien sur la page contenant le contrôle utilisateur ne se charge.

Je veux juste que le chargeur apparaisse pendant le chargement de la page.

Je pensais que mon problème était que le chargement de la carte se trouvait dans un panneau de mise à jour et que mon UpdateProgress était uniquement associé au panneau de mise à jour du panneau de mise à jour du contrôle utilisateur. Par conséquent, je n'obtiendrais aucune icône de chargement lors du chargement de la carte. Ce n'est cependant pas le cas.

Répondre

1

Je ne suis pas complètement en train de suivre exactement ce que vous faites ici, mais je suppose que vous avez pris ce qu'il y a dans votre contrôle utilisateur et vérifié qu'il fonctionne correctement s'il est placé directement dans la page? En guise de remarque, je retire personnellement UpdatePanels et le remplace par jQuery en raison des économies de performance significatives, en plus du fait qu'il est beaucoup plus rapide de comprendre jQuery et al. bizarreries au lieu des bizarreries d'ASP.NET AJAX. Pour être honnête, je voudrais pouvoir récupérer le temps que j'ai investi dans UpdatePanels/ASP.NET AJAX.

+0

Je n'ai pas encore essayé de le mettre sur la page actuelle. Je vais jeter une modification là-haut pour plus de précisions. Je suis d'accord avec les panneaux de mise à jour. Je les ai utilisés aussi parcimonieusement que possible. Il suce juste que vous ne pouvez pas avoir une méthode web dans un contrôle d'utilisateur si jquery ajax dans ce cas détruit la clarté du code. – Carter

1

I croyez Je comprends votre problème après avoir lu votre OP plusieurs fois. J'ai rencontré cette situation moi-même avec difficulté à obtenir un UpdateProgress pour fonctionner sur Page_Load. La solution? Ne pas déclencher l'événement côté serveur initialement sur Page_Load. Ajouter une horloge AJAX qui est à l'intérieur d'un UpdatePanel comme ci-dessous:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
    <asp:Timer ID="ajxTmr1" runat="server" Interval="1000" OnTick="ajxTmr1_Tick" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Le sur l'événement timer tick, faites votre code serveur selon les besoins.Si vous avez une mise à jour mise à jour jusqu'à UpdatePanel ci-dessus, tout devrait fonctionner correctement.

<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="UpdatePanel1" Visible="false"> 
    <%--Panel or whatever goes here--%> 
</asp:UpdateProgress> 
Questions connexes