2009-07-09 5 views
2

J'ai un problème étrange. Voici le scénarioPage_Load ne pas être appelé sur la re-navigation

Voici mes fichiers:

  1. Project1.aspx
  2. Project2.aspx

Ils sont mis en place exactement les mêmes, y compris leurs fonctions Page_Load :

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 

If (Not Page.IsPostBack) Then 

    setPrevIndex(-1) 

    ... 

    End If 


End Sub 

Ils sont tous deux configurés de cette manière.

Voici où je suis confronté à un problème. Lorsque je navigue vers l'une ou l'autre de ces pages, je dois m'assurer que prevIndex est mis à -1 (via la fonction).

  • Pour Project1.aspx lorsque je navigue à la page, les feux de Page_Load.
  • Pour Project1.aspx lorsque j'actualise la page, le Page_Load se déclenche.
  • Pour Project1.aspx lorsque j'appuie sur "Go" dans la barre de navigation de mon navigateur, revenant à la page en cours, le Page_Load se déclenche.

  • Pour Project2.aspx lorsque je navigue à la page, les feux de Page_Load.
  • Pour Project2.aspx lorsque j'actualise la page, le Page_Load déclenche.
  • Pour Project2.aspx quand je presse « Go » dans mon navigateur barre de navigation, voyage de retour vers la page en cours, le Page_Load ne se déclenche pas du tout! La fonction n'est même pas appelée.

Des idées pourquoi? Qu'est-ce qui causerait ça?

Veuillez demander des précisions.

Mise à jour:

Lorsque j'appuie sur « Go » dans le pointage URL vers la même URL, il semble que le masterpage est la seule chose qui rechargements, mais l'événement Load_Page ne même pas le feu ...

D'autres suggestions?

Merci, E

+0

a fait mon travail de suggestion? – Eric

+0

no. Je n'ai aucune idée de ce que cela pourrait être –

+0

Juste quelque chose à vérifier - quel navigateur utilisez-vous? Est-ce que le même problème se produit avec d'autres navigateurs? – Keith

Répondre

5

Essayez de désactiver le cache de sortie et voir si le problème persiste:

<system.web> 
    <caching> 
    <outputCache enableOutputCache="false"/> 
    </caching> 
<system.web> 
+0

Merci. Travaillé comme un charme –

+0

N'oubliez pas de le réactiver en production;) Si vous ne les utilisez pas déjà, vous devriez vérifier les profils de cache (ils peuvent être configurés/activés individuellement). http://msdn.microsoft.com/en-us/library/aa661294.aspx –

1

Essayez de régler les previndex à -1 dans la page Init Event. Je ne suis pas sûr pourquoi cela se produit bien.

3

Utilisez LiveHTTPHeaders ou Fiddler pour vous assurer que la page est réellement demandée de la même manière à chaque fois. Cela peut être un problème avec la mise en cache.

0

Il semble que votre page soit mise en cache. Cela entraînerait le LoadLoad à ne pas déclencher. Vérifiez que vous ne l'avez pas défini.

0

Avez-vous essayé de publier l'application sur une autre machine? IIS pourrait faire quelque chose, alors essayez d'éliminer cela en premier. En supposant que votre code est identique dans les deux na, seuls les noms de pages diffèrent (faites un diff sur les fichiers aspx et .cs pour vérifier), puis déplacez votre application vers un serveur différent et re-testez.

Si c'est encore le cas, votre navigateur doit probablement faire quelque chose en ce qui concerne la mise en cache.

1

Divers éléments liés au cache peuvent empêcher la demande, en particulier lorsque vous appuyez simplement sur le bouton "go", vous devriez donc vérifier vos en-têtes de cache.

Si la mise en cache est le problème, vous pouvez faire quelque chose comme:

//ask browser to revalidate: 
context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
//and hint that the page is outdated anyhow... 
context.Response.Cache.SetMaxAge(TimeSpan.Zero); 

qui devrait convaincre un navigateur pour obtenir vraiment une nouvelle version tous les pageview. Vous pourriez, par exemple, définir ces variables dans le Page_Load lui-même ;-). Si vous ne l'utilisez https, puis les suivantes sont trop sans risque:

//prevents plugin based file-open in IE+https, otherwise fine: 
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
context.Response.Cache.SetNoStore(); 

Je parie que cela résout - et sinon, je deuxième suggestion Jeremy Steins que vous utilisez fiddler pour vérifier que la demande est vraiment fait du tout (et puisque vous êtes un web-dev, obtenez un fiddler dans tous les cas, c'est un outil pratique à avoir disponible, et qui fonctionne pour tous les navigateurs!).

Enfin - pouvez-vous dire si aucun code autre sur la page s'exécute lorsque vous cliquez sur aller? (c'est-à-dire que la page entière n'est pas en cours d'exécution, ou simplement LoadLoad - cette dernière suggérerait une erreur de connexion d'événement, ce qui serait étrange étant donné que votre gestionnaire de charge fait parfois fire).

0

Essayez de recréer le scénario avec des fonctions dépouillées vers le bas sur votre serveur. Si le problème persiste, essayez d'utiliser des méthodes de contre-mémoire. Si non, cela signifie que ce doit être votre code.

3

Chargez votre site local et aller à http://yourwebsite/trace.axd

Cela montre une trace de serveur pour chaque page, ainsi que l'état du serveur. Il montre également le cycle de vie complet de la page avec des timings.

Effacer la trace actuelle puis répétez vos 3 visites et rechargements chacun Project1.aspx et Project2.aspx

Qu'est-ce que Trace.axd montrent maintenant? Vous devriez avoir 6 entrées, chacune avec le code d'état de 200 et le verbe GET.

Si vous en avez moins, votre problème est la mise en cache.

Si vous en avez 6, vérifiez les détails du dernier - que montre le cycle de vie de l'événement de la page?Il affichera également la hiérarchie de contrôle WebForm complète, donc si cela est lié à la page maître, vous serez en mesure de dire.

0

Si vous avez ce (ou similaire) en haut de votre page (ou maître), qui peut provoquer:

<%@ OutputCache Duration="3600" VaryByParam="none" %> 
Questions connexes