Frage

Hier ist die Situation: Ich habe einen Text-Set-Label, unmittelbar gefolgt von einer response.redirect gefolgt () aufrufen, wie folgt (dies ist nur ein Beispiel, aber ich glaube, dass es meine Situation beschreibt genau):

aspx:

<asp:Label runat="server" Text="default text" />

-Code-behind (Code auf einem Onclick-Ereignisse genannt):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

Wenn die Seite macht, sagt die Bezeichnung „Standardtext“. Was muss ich anders machen? Mein Verständnis war, dass solche Änderungen automatisch hinter den Kulissen geschehen würden, aber anscheinend nicht in diesem Fall. Danke.

Für einen wenig mehr Hintergrund, die Code-behind-Snippet wird in einem Verfahren genannt, das auf einem Onclick-Ereignis aufgerufen wird. Es gibt mehr zu, aber ich nur enthalten, was zu diesem Thema von Interesse ist.

War es hilfreich?

Lösung

Nach einer Umleitung finden Sie alle Statusinformationen verlieren auf Ihre Kontrollen verbunden. Wenn Sie einfach nur die Seite aktualisieren möchten, entfernen Sie die Umleitung. Nachdem der Code Ausführung beendet hat, wird die Seite aktualisiert und jeder Staat gehalten werden.

Hinter den Kulissen arbeitet, weil ASP.NET die Statusinformationen zu einem verborgenen Eingabefeld auf der Seite schreibt. Wenn Sie auf eine Schaltfläche klicken, wird das Formular geschrieben und ASP.NET entschlüsselt den Ansichtszustand. Ihr Code ausgeführt wird, Modifizieren des Zustands, und nach, dass der Staat wieder auf das versteckte Feld geschrieben wird, und der Zyklus geht weiter, , bis Sie die Seite ohne POST ändern. Dies kann passieren, wenn Sie einen Hyperlink auf eine andere Seite klicken oder über Response.Redirect (), die den Browser anweist, die angegebene URL zu folgen.

Andere Tipps

Ein Response.Redirect Anruf wird der Browser des Benutzers bitten, die Seite in der URL angegeben laden Sie es geben. Da dies eine neue Anforderung für Ihre Seite ist nutzt die Seite den Text, der in Ihrem Markup enthalten ist (wie ich, dass das Etikett Text übernehmen innerhalb eines Tastenhandler oder ähnlich eingestellt werden).

Wenn Sie die Response.Redirect rufen Sie Ihre Seite entfernen sollte wie beschrieben funktionieren.

ASP und ASP.Net ist von Natur aus staatenlos, es sei denn Staat explizit angegeben wird. Normalerweise zwischen Postbacks Informationen wie der Wert eines Etiketts im Ansichtszustand enthalten ist, aber wenn Sie Seiten ändern, die Viewstate verloren, weil sie in einem versteckten Bereich auf der Seite, die gespeichert wird.

Wenn Sie den Wert des Etiketts zwischen den Anrufen Sie einen der staatlichen Mechanismen nutzen, müssen halten (z Session, Einstellungen) oder Kommunikationssystemen (Request (GET, POST)).

Zusätzlich können Sie für Server.Transfer suchen, die wird sich ändern, die die Seite hinter den Kulissen verarbeitet. Response.Redirect ist entworfen, um Ihren aktuellen Kontext in den meisten Fällen zu Graben.

Um Zustand bestehen bleiben, verwenden Sie Server.Transfer statt Response.Redirect.

Also, wenn ich meine eigene Frage beantworten kann (nach der FAQ, das ist, ermutigt), die kurze Antwort ist, Sie bleiben nicht Ansichtszustand durch Umleitungen. Ansichtszustand ist für Postbacks, nicht Umleitungen.

Bonus: Alles wollten Sie schon immer über View State in ASP wissen .NET , mit Bildern!

Für das, was es wert ist (und hoffentlich ist es etwas wert), Kapitel 6 von Pro ASP .NET 3.5 in C # 2008 Second Edition zu dem Thema eine hervorragende Ressource. Das ganze Buch ist groß gewesen, so weit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top