2010-10-22 11 views
5

Ich mache eine Windows Phone 7 App, die eine Login/Logout-Semantik hat (Authentifizierung in einer Web-App). Wenn sich der Benutzer abmeldet, navigiere ich zurück zum Anmeldebildschirm und vergesse die Sitzungsauthentifizierung.Wie lösche ich den Navigationsverlauf in Silverlight/Windows Phone 7?

Wenn ich dies tue, möchte ich auch den Navigationsverlauf löschen, damit ich nicht zu einer Seite zurückkehren kann, die erwartet, dass sie bereits authentifiziert ist.

Ich kann nicht sehen, wie es mit NavigationService geht, und frage mich, ob es einen Weg gibt, dies zu tun.

Antwort

6

Hier sind ein paar Dinge zu sehen. Zuerst empfehle ich, sich mit der hier angebotenen Anleitung vertraut zu machen.

Introducing the concept of “Places” - Peter Torr's Blog

Redirecting an initial navigation - Peter Torr's Blog (unten leider im Moment)

Wenn Sie in der Lage sind, innerhalb dieser Anleitung zu arbeiten, dass der beste Weg ist. Es gibt spezielle Hinweise zum Umgang mit Login-Bildschirmen.

Wenn Sie gezwungen sind, eine Home-Button-Funktion anzubieten. Achten Sie darauf, wie Sie dies anwenden, da Zertifizierer Apps zurückwerfen, die sich in Bezug auf die Navigation auf unerwartete Weise verhalten. Ich denke, wenn diese Funktion hinter einem Home-Button steht, sollte es in der Überraschungsabteilung in Ordnung sein. Wie das im Laufe der Zeit mit Zertifizierung aussieht, werden wir sehen. Ein "Logout" -Szenario gilt gleichermaßen.

Hier sind drei Ansätze von Richard Woo, Maarten Struys, Sam Jarawan.

+0

Dank Mick für Ihre Seite "Loaded" Veranstaltung erstellen. Ich freue mich darauf, diesen Post zu lesen, wenn er wieder da ist. Ich habe Probleme zu sehen, wie das sehr typische Szenario des An- und Abmeldens, insbesondere bei der Authentifizierung gegen Remote-Ressourcen, in das passt, was ich über die Navigationsregeln für Windows-Telefone gelesen habe. – dkackman

+0

Es gab eigentlich zwei Beiträge, die ich oben bearbeitet habe - gelesen in der angegebenen Reihenfolge. Sein Blog ist übrigens wieder da. –

+1

Sieht so aus, als ob dieser Rat kürzlich auch Eingang in die Dokumentation gefunden hat. http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx –

0

Ich fürchte, Sie können den Stapel von Seiten nicht löschen und was mehr ist, Ihre App wird die Zertifizierung nicht bestehen. More info

3

Dieser Code funktioniert gut (es auf Ihrer Seite sein muss), haben noch nicht versucht, es Vergangenheit Zertifizierung zu erhalten, aber der Code funktioniert:

while (true) 
{ 
    if (this.RemoveBackEntry() == null) 
    { 
     break; 
    } 
    } 

Das mit dem documentation zu unterscheiden scheint, Das sagt eine Ausnahme wird ausgelöst, wenn es keine weiteren Elemente gibt, so habe ich logged a bug auf Benutzer Stimme für diese, so dass es in Zukunft ändern kann.

0

Eine einfachere Möglichkeit, nur die Backstack löschen ist die folgende

while (NavigationService.CanGoBack) 
{ 
    NavigationService.RemoveBackEntry(); 
} 

Beachten Sie tun aber, dass, wenn Sie dies im onloaded Fall tun wird, es wird wieder Feuer wird bei jedem Besuch der Seite navigiert und klicken schließe die App!

Wichtiger Hinweis: Wenn Sie ein Webcontrol oder das NAX-Anzeigesystem verwenden, wird der Backkey sowohl von der Seite als auch vom Web-Steuerelement verbraucht, sodass die App existiert und nicht auf eine Seite zurückkehrt.

** Update danach auch nur eine noch kürzere Hand-Version von dem MS dev Zentrum

while (NavigationService.RemoveBackEntry() != null); 

Eine einfache Linie.Nizza

0

Sie sollten

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    }