Das private Mitgliederfeld von ASP.NET verliert beim Postback Wert

8

Betrachten Sie den folgenden Code:

%Vor%

Wenn ich in diesem Code "Benutzername" als privat deklariere, wird er nach nachfolgenden Postbacks auf null initialisiert.

Warum?

Was ist das Geheimnis?

    
why 21.08.2009, 19:01
quelle

3 Antworten

16

Da ASP.NET zustandslos ist, bedeutet dies, dass es den Zustand nicht vom Post zurück zum Postback hält. Speichern Sie den Benutzer im Ansichtszustand, in der Sitzung oder in der Anwendung, um ihn beim Postback zum Postback zu sehen.

%Vor%     
David Basarab 21.08.2009, 19:07
quelle
5

Jedes Mal, wenn Sie Postbacks ausführen, selbst für "einfache" Dinge wie Button-Klick-Ereignisse, arbeiten Sie mit einer neuen Instanz der Seitenklasse. Das ist ASP.Net 101.

    
Joel Coehoorn 21.08.2009 19:08
quelle
1

Die Angabe des Benutzernamens als privat oder geschützt hat keinen Einfluss auf diese Situation. Das einzige geschützte / private Lager wäre die Zugänglichkeit der Variablen außerhalb der Klasse oder in geerbten Mitgliedern.

Ich glaube, das ist wahrscheinlich ein Lebenszyklusproblem.

Wenn Sie diese Seite zum ersten Mal aufrufen, hat der Benutzername nur einen Wert, wenn die Abfragezeichenfolge für die Anforderung festgelegt wurde. "/TeacherControlPanel.aspx" wird also einen Benutzernamen ohne Wert haben, aber "/TeacherControlPanel.aspx?username=SomeUserName". In diesen Fällen hat der Feldbenutzername nur einen Wert, wenn einer festgelegt ist. Wenn kein Querystring gesetzt ist und die Seite das click-Ereignis der Schaltfläche verarbeitet, wird die Ladung ausgelöst. Keine Abfragezeichenfolge bedeutet, dass der Benutzername null ist, was bedeutet, dass das click-Ereignis nichts an die Weiterleitungszeichenfolge anhängen kann.

Die Frage ist also in Ihrer Anwendung, welchen Navigationspfad Sie verwenden, um zu TeacherControlPanel.aspx zu gelangen?

    
Jonathan Bates 21.08.2009 21:52
quelle

Tags und Links