web-dev-qa-db-fra.com

Page_Load se déclenche deux fois dans une page ASP.NET

La fonction Asp.net page_load se charge deux fois .. elle affecte donc les performances de ma page ..__ Est-ce que quelqu'un sait la raison pour laquelle il se charge deux fois?.

Non, je n'appelle la fonction de chargement de page nulle part ...

37
Goutham

Je viens de rencontrer ce problème et j'ai pensé poster une réponse résumant ce que j'ai trouvé, ainsi que mon problème.

1. img tags with src="" or Image tags with ImageUrl="
2. Using AutoEventWireup="true" and adding a page handler
3. Having manually added the event handler (more common for C# than VB)
4. Handling both MyBase.Load and Me.Load

et enfin mon problème ....

Ma page a hérité d'une classe qui incluait un gestionnaire de chargement de page, qui héritait d'une classe avec un gestionnaire de chargement de page.

Public Class C1
    Inherits System.Web.UI.Page
   Protected Overridable Sub PageLoad(ByVal sender As Object, 
                               ByVal e As System.EventArgs) Handles Me.Load
   End Sub
End Class

Public Class C2
    Inherits C1
    Protected Overrides Sub PageLoad(ByVal sender As Object, 
                      ByVal e As System.EventArgs) Handles Me.Load
        MyBase.PageLoad(sender, e)
    End Sub
End Class

Public Class MyPage 
    Inherits C2
    Protected Overrides Sub PageLoad(ByVal sender As Object, 
                      ByVal e As System.EventArgs) 
        MyBase.PageLoad(sender, e)
    End Sub
End Class

J'ai testé cela, et si vous mettez une poignée sur la méthode dans MyPage, elle sera touchée 3 fois ...

31
jmoreno

Ce n'est pas vous qui appelez la fonction de chargement de page deux fois, c'est la façon dont fonctionne ASP.NET. La page se poste sur elle-même, appelant ainsi la fonction page_load, lorsqu'un ou plusieurs contrôles serveur de la page sont déclenchés (ceux définis comme postback).

Ce que vous devez faire est de mettre quelques contrôles pour différencier un chargement initial de page d'un post back

if(!IsPostBack) 
{  
//Code when initial loading 
}
 else 
{ 
// code when post back 
}
16
Julius A

S'il vous plaît trouver la solution ici ........

  1. Vérifiez si les événements Load ont des gestionnaires pour la classe de base et la classe enfant Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Gère MyBase.Load, Me.Load **

  2. S'il s'agit simplement de supprimer le Me.Load de l'événement, vérifiez maintenant votre page. J'espère que cela peut être utile et résoudre votre problème.

10
sajeeth.S

Une fois, j'ai trouvé la chaîne suivante dans un projet:

  <link rel="Shortcut Icon" href="#" type="image/x-icon" />

Quelqu'un vient de le faire comme il le fait habituellement avec "a href" . Mais le navigateur essaie en fait d'obtenir l'icône du site à chaque actualisation, de sorte qu'il envoie une requête à l'adresse du paramètre href, c'est-à-dire à la même page.

Alors, vérifiez ceci aussi.

7
Alexey F

Pour moi, c'était une balise d'image vide. 

      <img src="#" />
6
vinayak hegde

N'oubliez pas de vérifier la valeur IsPostBack comme indiqué ci-dessous:

    protected void Page_Load(object sender, EventArgs e)
    {
            if (!this.IsPostBack)

Vous pouvez placer des points d'arrêt à l'intérieur de ce bloc IF pour vérifier que vous exécutez Page_Load deux fois . Si l'exécution de Page_Load est exécutée deux fois et qu'il ne s'agit pas d'une publication, vérifiez la méthode OnInit () pour cette page ..__ ne connectez pas le dispositif de prise de charge comme ci-dessous. Vous verrez souvent ce code issu du code ayant été migré à partir de versions antérieures de Visual Studio.

        this.Load += new System.EventHandler(this.Page_Load);

Supprimez ceci si vous le trouvez. Cela suppose que les éléments suivants figurent en haut du balisage de la page . AutoEventWireup = "true"

4
Ray

J'ai résolu mon problème en définissant l'attribut AutoEventWireUp sur FALSE. J'ai eu ce problème lors de la migration de .net 1.1 vers .net 4.0. D'une manière ou d'une autre, VS2012 a réinitialisé cet attribut sur TRUE lorsque je copie le fichier depuis l'ancienne version.

3
user2589683

J'ai eu le même problème et résolu.

J'ai vérifié mes règles Global.ascx et Mes règles de réécriture.

Lorsque la page demandée, l'URL n'avait pas "/" à la fin de l'URL et une redirection s'est produite de "x.com/x" à "x.com/x/" selon ma configuration pour les normes de référencement.

Donc, tout fonctionne bien et vos liens internes doivent avoir "/" à la fin des URL pour éviter les charges multiples.

3
Mohsen Unlimited

L'objet Page appelle la méthode OnLoad sur l'objet Page, puis procède de manière récursive pour chaque contrôle enfant jusqu'à ce que la page et tous les contrôles soient chargés. L'événement Load des contrôles individuels se produit après l'événement Load de la page.

Utilisez la méthode d'événement OnLoad pour définir les propriétés dans les contrôles et pour établir des connexions de base de données.

Reffer MSDN: entrez la description du lien ici

2
DotNET

S'il vous plaît essayez d'apporter les modifications mentionnées dans ce lien. http://social.msdn.Microsoft.com/Forums/en/vbgeneral/thread/ccc75925-3460-497c-8471-fcebecd8d061

BTW je googlé Page_Load Being called twice

1
Doug Chamberlain

Pour moi, ce problème est apparu soudainement après la mise à jour Windows d'octobre 2017. J'ai remarqué que pour les pages accessibles aux utilisateurs anonymes via un élément Location de web.config, il est maintenant nécessaire d'autoriser également l'accès à tous les éléments référencés par cette page, tels que des images, des feuilles de style, etc. L'exemple ci-dessous accorde l'accès anonyme à la page de connexion et le répertoire 'images' (dossier aka):

<location path="login.aspx">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>
<location path="images">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

Mise à jour: j'ai trouvé une deuxième cause d'appel à Page_Load deux fois. Dans l'ancien code hérité, les fichiers .aspx.designer.cs de certaines pages contenaient des incohérences qui n'avaient apparemment posé aucun problème jusqu'à présent. Au lieu de tenter une réparation, j'ai créé de nouvelles pages, ce qui a éliminé l'événement de double chargement.

0
Anke

J'ai eu le même problème . C'était à cause d'un TreeNode avec ImageUrl = "".

0
bruno leclerc

Pour moi, cela a été résolu en supprimant 

Handles Me.Load 

et en changeant la méthode comme 

Protected Overrides OnLoad(...)
0
sertsedat

J'ai remplacé le Response.Redirect par le Server.Transfer car il a été suggéré que ce soit la nouvelle façon de faire les choses. Depuis lors, les pages se chargent deux fois et le bouton Précédent de Chrome retourne à la page précédente et revient immédiatement à la page actuelle. J'ai remplacé le Server.Transfer par le Response.Redirect et tout était revenu à la normale ..__ J'ai également mis cette réponse sur les chargements de page deux fois à cause du code js .

0
Dieter Stalmann