2011-06-29 2 views
0

J'ai une page asp.net qui doit remplir une arborescence basée sur une structure de répertoire. Plutôt que de laisser l'utilisateur regarder une page vierge pendant la création des nœuds, j'essaie d'utiliser UpdateProgress pour une image de chargement. La recherche par l'intermédiaire de diverses discussions sur Internet m'a donné un certain nombre de choses différentes que j'ai essayées, qui ont leurs propres problèmes que je n'arrive pas à résoudre.J'ai provoqué une boucle de publication utilisant javascript onload pour déclencher une image updateprogress

Option 1 utilise le javascript suivant:

function pageLoad() { 
     __doPostBack('btnBuildTree', ''); 
    } 

Cet événement est auto câblé et donc je ne pas besoin d'ajouter une balise onload à l'élément du corps. Pour tester mon code ressemble derrière comme ceci:

protected void btnBuildTree_Click(object sender, EventArgs e) 
    { 
      System.Threading.Thread.Sleep(5000); 
      // minor code here to know it did something 
    } 

Quand je l'ai mis comme ça, la page se charge, la progression de la mise à jour qu'exécuter que je veux, et quand btnBuildTree_Click termine le rafraîchissement UpdatePanel et tout est grand , sauf qu'il déclenche immédiatement une autre publication, déclenche la fonction javascript pageLoad(), ce qui provoque la publication de btnBuildTree, et ainsi de suite.

Option 2 n'a qu'un seul changement et qui est le javascript:

function buildTree() { 
    __doPostBack('btnBuildTree', ''); 
    } 

Et j'ajouter ce tag:

<body onload="buildTree()"> 

Avec cette configuration, la page se charge, l'événement se déclenche btnBuildTree_Click et fait tout son travail, et quand il est fini, il ne provoque pas une autre publication donc je n'ai pas de boucle. Le seul inconvénient à cela est que UpdateProgress ne montre jamais, donc cela va à l'encontre de l'objectif d'essayer de leur donner un 'écran de chargement'. Je crois que je manque simplement quelque chose et j'espère que quelqu'un peut indiquer ce que c'est.

Merci!

Répondre

0

Votre fonction pageLoad() est appelée pour toutes les publications, y compris les publications asynchrones. Dans la fonction pageLoad(), vous pouvez ajouter une logique pour indiquer si l'arborescence a été affichée.

En supposant que vous enlèverez l'indicateur de chargement après l'TreeView est affiché, vous pouvez faire quelque chose comme:

function pageLoad() { 
    var loading = $("#treeview-loading"); // Using jQuery to find the loading indicator. 
    if (loading.get(0)) { 
     __doPostBack('btnBuildTree', ''); 
    } 
} 
+0

Cela aide beaucoup, je vous remercie de me donner une direction à regarder dans! – Brian

+0

De rien! Je suis content d'avoir pu aider. –

+0

Ok, donc j'ai créé un HiddenField appelé 'chargement' que je vérifie avec votre code (après avoir configuré VS2008 pour utiliser jquery ...) Maintenant j'essaie de retirer l'indicateur de chargement et c'est retourne toujours un positif quand je fais '(chargement.get (0)) {' J'ai essayé de définir la propriété visible sur' false 'et de définir l'objet sur null mais aucun n'a fonctionné, et je m'excuse d'avance pour les questions continues, mais je ne fais pas beaucoup avec js ... :) – Brian

0

Comment ajoutez-vous le js pour pageload?

Si cela est ajouté sur Page_Load en utilisant RegisterStartupScript ou similaire, ajoutez un chèque !IsPostBack de sorte qu'il ne sera pas ajouter à nouveau s'everyime le eventhandler btnBuildTree_Click est appelée.

Questions connexes