2010-11-07 11 views
0

Je suis un peu déconcerté par quelque chose qui se passe dans une application asp.net.WebControl rendercontents mis à jour par Ajax

Il y a un contrôle sur la page qui fait une requête ajax (en utilisant un UpdatePanel et un Trigger) toutes les 5 secondes pour boucler certaines images affichées.

J'ai créé un WebControl qui récupère des informations sur Twitter, et bien qu'il ne fasse pas partie du UpdatePanel, RenderContents semble être appelé à chaque appel AJAX.

Est-ce un comportement normal, ou est-ce qu'il me manque quelque chose? Et y a-t-il un moyen de contourner cela?

Répondre

1

Sans de votre code, il sera difficile de donner une réponse définitive, cependant:

Notez que le cycle de vie pleine page est exécutée même pour un appel de panneau de mise à jour. Fondamentalement ASP.Net génère le balisage pour la page entière, mais retourne seulement la partie pour le panneau de mise à jour. Tout ce qui est dans les événements load, prerender, etc pour la page et tous ses contrôles seront exécutés pour chaque mise à jour du panneau.

Vous pouvez vérifier si vous effectuez un chargement de page normal ou un chargement de panneau AJAX/de mise à jour en vérifiant la valeur ScriptManager.IsInAsyncPostBack. Vous pouvez encapsuler du code que vous ne voulez pas exécuter dans un bloc "not IsInAsyncPostBack". Personnellement, j'éviterais d'utiliser Update Panels et j'utiliserais des appels AJAX purs pour mettre à jour les images.

+0

merci, AuSteve. Malheureusement, je travaille avec un chargement de code existant (dont je n'ai pas la source à - ne demandez pas) et en ajoutant un nouveau contrôle. –

+0

Vous pouvez toujours placer votre logique dans un bloc "not IsInAsyncPostBack" afin que votre code ne s'exécute que sur un chargement de page complet. – AUSteve