ASP.Net: Page_Load () wird mehrmals aufgerufen

8

Ich weiß nicht viel über ASP.Net, aber ich versuche ein neues Steuerelement für eine Nachrichtenbox zu erstellen. Sie geben einige Informationen ein und drücken eine Taste.

Aus irgendeinem seltsamen Grund, wenn die Schaltfläche gedrückt wird, wird Page_Load () ein zweites Mal aufgerufen, und alle Mitgliedsvariablen werden auf null zurückgesetzt! Ich brauche diese Variablen, und Page_Load () hat keinen Grund, ein zweites Mal aufgerufen zu werden! Natürlich ist der Callstack nutzlos.

    
evilfred 07.07.2009, 21:20
quelle

9 Antworten

16

Denken Sie daran, dass Sie in ASP.Net jedes Mal, wenn Sie ein Postback irgendeiner Art verursachen, einschließlich der Behandlung von Ereignissen wie Schaltflächenklicks, mit einer brandneuen Instanz Ihrer Seitenklasse arbeiten, die von Grund auf neu erstellt werden muss. Alle Arbeiten, die Sie zuvor zum Erstellen der Seite auf dem Server ausgeführt haben, sind weg . Das bedeutet, dass Sie den Seitenlebenszyklus gesamter einschließlich Ihres Seitenladecodes und nicht nur den Klickcode ausführen müssen.

  

Immer zwei gibt es, nicht mehr und nicht weniger. Eine Anfrage und eine Antwort.

    
Joel Coehoorn 07.07.2009, 21:26
quelle
4

Wenn die Seite zurückschlägt, wird die Page_Load-Methode aufgerufen. Sobald der Server die Seite tatsächlich verarbeitet und Ihnen basierend auf den Änderungen eine neue sendet, wird Page_Load erneut aufgerufen, und zwar das erste Mal auf der neuen Seite, die an Sie gesendet wurde.

Wenn Sie also Daten im Page_Load -Ereignis abrufen oder einige Werte festlegen, schließen Sie sie im folgenden Block ein:

%Vor%

um etwas von deinem Zustand zu bewahren. Andernfalls werden die Anweisungen, die Sie in das Page_Load-Ereignis einfügen, jedes Mal ausgeführt.

Es hilft, den Lebenszyklus der ASP.Net-Seite zu überprüfen:)

    
Eugene 07.07.2009 21:25
quelle
1

Wie von Joel erwähnt, gehen Instanzvariablen verloren, sobald die Seite an den Client zurückgesendet wird. Es gibt jedoch verschiedene Methoden zum Speichern der Werte Ihrer Variablen, damit Sie sie später abrufen können. Diese Seite auf Statusverwaltung ist ein guter Ausgangspunkt, wenn Sie mehr erfahren möchten.

>     
tbreffni 07.07.2009 21:47
quelle
1

Jedes Tag / Element, das eine URL-Referenz wie img, anchor, object usw. benötigt, muss auf die leere Referenz überprüft werden.

z.B. href="", url="", src="" sind einige häufige Fehler.

    
anand 20.04.2011 15:42
quelle
1

Dieser Code funktioniert für mich:

%Vor%     
user3207728 17.01.2014 17:52
quelle
1

Für mich war das Problem ein wenig kompliziert, aber ich fand das

protected override void OnPreRender(EventArgs e)

Der

-Handler wird nur einmal aufgerufen, daher ist es sicherer, einige Aktionen dort einzutragen, wenn es für Sie nicht zu spät ist.

    
David d C e Freitas 26.06.2014 00:24
quelle
0

Nur ein Schuss in die Dunkelheit, aber vielleicht fügen Sie dies nach Ihrem page_load hinzu:

%Vor%     
Tim Meers 07.07.2009 21:26
quelle
0

Eine Erweiterung der @ user3207728 Antwort, ich fand diesen Link erklärt es gut und hat eine einfache Lösung ...

Ссылка

Leider ist die Überprüfung nur für if (!Page.IsPostBack) nicht genug, da IsPostBack bei einer Aktualisierung immer FALSE ist.

    
Fandango68 28.05.2015 02:01
quelle
-1

Sie können Sitzungen oder Viewstate verwenden, um die Werte von Variablen beizubehalten.

  1. Wenn Sie zu einer anderen Seite umleiten möchten, verwenden Sie session []
  2. Wenn Sie auf der gleichen Seite bleiben möchten, verwenden Sie viewstate []
Rafi Ansari 15.08.2016 06:59
quelle

Tags und Links