it-swarm.com.de

Page Load wird zweimal auf der ASP.NET-Seite ausgelöst

Die Funktion "Asp.net page_load" wird zweimal geladen. Daher wirkt sich dies auf die Leistung meiner Seite aus. Wer weiß, warum es zweimal geladen wird.

Nein, ich rufe die Seitenladefunktion nirgendwo auf ...

37
Goutham

Ich bin gerade auf dieses Problem gestoßen und dachte, ich würde eine Antwort posten, in der zusammengefasst ist, was ich gefunden habe, plus mein aktuelles Problem.

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

und schließlich meine Ausgabe ....

Meine Seite wurde von einer Klasse geerbt, die einen Page Load-Handler enthält, der von einer Klasse mit einem Page Load-Handler geerbt wurde.

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

Ich habe das getestet und wenn Sie ein Handles auf die Methode in MyPage setzen, wird es 3 mal getroffen ...

31
jmoreno

Sie rufen die Funktion zum Laden von Seiten nicht zweimal auf. Dies ist die Funktionsweise von ASP.NET. Die Seite wird an sich selbst gepostet und ruft daher die Funktion page_load auf, wenn Serversteuerelemente auf der Seite ausgelöst werden (Steuerelemente, die auf Postback gesetzt sind).

Was Sie tun müssen, ist ein paar Checks, um zwischen dem ersten Laden einer Seite und einem Post Back zu unterscheiden

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

Die Lösung finden Sie hier ........

  1. Überprüfen Sie, ob die Load-Ereignisse über Handlers für die Basisklasse und die untergeordnete Klasse verfügen Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load, Me.Load **

  2. Wenn es einfach ist, entfernen Sie das Me.Load vom Ereignis, überprüfen Sie jetzt Ihre Seite. Hoffen Sie, dass dies nützlich sein kann und lösen Sie Ihr Problem.

10
sajeeth.S

Sobald ich die folgende Zeichenfolge in einem Projekt gefunden habe:

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

Jemand hat es einfach so gemacht, wie er es normalerweise mit "a href" tut . Der Browser versucht jedoch bei jeder Aktualisierung, das Site-Symbol abzurufen, und sendet daher eine Anfrage an die Adresse vom href-Parameter, d. H. An dieselbe Seite.

Also das auch überprüfen.

7
Alexey F

Für mich war es ein leeres Image-Tag. 

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

Denken Sie daran, den IsPostBack-Wert wie folgt zu überprüfen:

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

Sie können Haltepunkte in diesen IF-Block einfügen, um zu überprüfen, ob Sie PageLoad zweimal ausführen. Wenn Sie PageLoad zweimal ausführen und jedes Mal kein Postback ausgeführt wird, überprüfen Sie die OnInit () -Methode für diese Seite . Überprüfen Sie dies verkabeln den Load-Handler nicht wie unten. Dieser Code wird häufig aus Code angezeigt, der aus früheren Versionen von Visual Studio migriert wurde.

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

Entfernen Sie dies, wenn Sie es finden. Dies setzt voraus, dass Sie oben im Markup für die Seite die folgenden Optionen haben. AutoEventWireup = "true"

4
Ray

Ich habe mein Problem gelöst, indem ich das AutoEventWireUp-Attribut auf FALSE gesetzt habe. Dieses Problem ist bei der Migration von .net 1.1 auf .net 4.0 aufgetreten. Irgendwie setzt VS2012 dieses Attribut auf TRUE zurück, wenn ich die Datei aus der älteren Version kopiere.

3
user2589683

Ich hatte das gleiche problem und gelöst.

Ich habe meine Global.ascx- und meine Regeln zum Umschreiben überprüft.

Wenn die Seite angefordert wurde, hatte die URL am Ende der URL kein "/" und eine Umleitung von "x.com/x" nach "x.com/x/" erfolgte gemäß meiner Konfiguration für SEO-Standards.

Alles funktioniert also gut und Ihre internen Links sollten "/" am Ende von URLs enthalten, um mehrere Ladevorgänge zu vermeiden.

3

Das Page-Objekt ruft die OnLoad-Methode für das Page-Objekt auf und führt rekursiv das gleiche für jedes untergeordnete Steuerelement aus, bis die Seite und alle Steuerelemente geladen werden. Das Load-Ereignis einzelner Steuerelemente tritt nach dem Load-Ereignis der Seite auf.

Verwenden Sie die OnLoad-Ereignismethode, um Eigenschaften in Steuerelementen festzulegen und Datenbankverbindungen herzustellen.

Referenz-MSDN: Geben Sie die Linkbeschreibung hier ein

2
DotNET

Versuchen Sie bitte, die in diesem Link genannten Änderungen vorzunehmen. http://social.msdn.Microsoft.com/Forums/en/vbgeneral/thread/ccc75925-3460-497c-8471-fcebecd8d061

Übrigens habe ich gegoogelt Page_Load Being called twice

1

Für mich ist dieses Problem nach dem Windows-Update vom Oktober 2017 plötzlich aufgetaucht. Ich habe festgestellt, dass für Seiten, die anonymen Benutzern über ein Location-Element in web.config zugänglich gemacht werden, nun auch Zugriff auf alle von dieser Seite referenzierten Assets gewährt werden muss, z. B. Bilder, Stylesheets usw. Das folgende Beispiel gewährt anonymen Zugriff auf die Anmeldeseite und das 'images'-Verzeichnis (aka Ordner):

<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>

Update: Ich habe eine zweite Ursache dafür gefunden, dass Page Load zweimal aufgerufen wurde. In altem, altem Code enthielten die .aspx.designer.cs-Dateien einiger Seiten Inkonsistenzen, die anscheinend bis jetzt keine Probleme verursacht hatten. Anstatt zu versuchen, zu reparieren, erstellte ich neue Seiten, wodurch das Doppelbelastungsereignis beseitigt wurde.

0
Anke

Ich hatte das gleiche Problem ..__ wegen eines TreeNode mit ImageUrl = "".

0
bruno leclerc

Für mich konnte ich diesen Aufruf mehrfach umgehen, indem ich stattdessen das PreRender-Ereignis verwendete

protected override void OnPreRender(EventArgs e)

Dies wird nur einmal aufgerufen, auch wenn die Onloads und Inits millionenfach aufgerufen werden.

0

Für mich wurde es durch Entfernen gelöst 

Handles Me.Load 

und die Methode ändern, wie 

Protected Overrides OnLoad(...)
0
sertsedat

Ich habe den Response.Redirect durch Server.Transfer ersetzt, da vorgeschlagen wurde, die neue Vorgehensweise zu sein. Seitdem werden die Seiten zweimal geladen, und die Zurück-Schaltfläche in Chrome kehrt zur vorherigen Seite und sofort zur aktuellen Seite zurück. Ich habe den Server.Transfer durch Response.Redirect ersetzt, und alles war wieder normal ..__ Ich stelle diese Antwort auch auf Seite lädt zweimal aufgrund von js code .

0
Dieter Stalmann