2009-07-08 7 views
1

J'expérimente maintenant AJAX. J'ai un contrôle personnalisé qui apparaît sur ma page maître dans lequel il y a un panneau de mise à jour et une minuterie. La minuterie se déclenche et le panneau se met à jour et tout est dandy. Sauf qu'il y a certaines opérations que je ne veux pas qu'il fasse à chaque rafraîchissement. Il semble que le cycle de vie complet de la page se produise à chaque actualisation. Il y a des variables que je veux définir, et garder leur valeur sur l'actualisation. Y at-il un moyen de le faire SEULEMENT ce qui est dans l'appel de timer_tick?C# updatepanel avec timer Page_load

+0

Quel est le code timer_tick fait? –

Répondre

0

UpdatePanels force toujours l'actualisation de toute la page. Si vous voulez seulement traiter une certaine partie de la page (et c'est une taille fixe), vous pouvez essayer d'utiliser un iframe.

Alternativement, si vous souhaitez enregistrer les variables que vous pouvez les mettre dans ViewState ou SessionState afin qu'ils persistaient entre postbacks

2

Vous pouvez jeter un oeil sur requête [ « __ eventtarget »] en cas de chargement de la page pour voir ce que le contrôle a causé la publication. Si c'est le contrôle de la minuterie, sautez hors de la fonction.

En supposant que votre minuterie est appelée « refreshtimer »:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request["__EVENTTARGET"] == "refreshtimer") 
    { 
     return; 
    } 
    // etc 
2

Je ne sais pas ce qu'est un poste de AJAX.Net regarde en arrière comme, mais je protège habituellement mes autres contrôles et le contenu en vérifiant après retour;

protected void Page_Load(object sender, EventArgs e) 
{ 

    // if its a post back then my controls should already be setup... 
    if (!Page.IsPostBack) 
    { 
      InitControlData(); 
    }  
} 

puis il devrait tomber à votre gestion des événements?

protected void timer_tick(object sender, EventArgs e) 
{ 
    // Do my Ajaxy work~ 
} 
0

Ceci n'est pas possible avec UpdatePanels ... la totalité de la page traversera tout le cycle de vie. Comme d'autres l'ont mentionné, vous pouvez limiter le traitement qui se produit en utilisant IsPostBack ou IsInAsyncPostBack de ScriptManager, mais en fin de compte cela ne va pas être une excellente solution pour les pages complexes. Cependant, vous pouvez utiliser les méthodes Page pour exécuter une seule méthode statique dans votre page, mais vous devrez effectuer vous-même l'appel JavaScript et mettre à jour l'interface utilisateur. Voici quelques exemples: