2010-10-22 147 views
5

我正在製作一個Windows Phone 7應用程序,它具有登錄/註銷語義(對Web應用程序進行身份驗證)。當用戶註銷時,我回到登錄屏幕並忘記會話身份驗證。如何在Silverlight/Windows Phone 7中清除導航歷史記錄?

這樣做時,我還想清除導航歷史記錄,以便無法返回到期望它們已經通過身份驗證的頁面。

看不到如何做到這一點NavigationService,我想知道是否有辦法做到這一點。

回答

6

這裏有幾件事要看。首先,我建議您熟悉這裏提供的指導。

Introducing the concept of 「Places」 - Peter Torr's Blog

Redirecting an initial navigation - Peter Torr's Blog(向下的那一刻不好意思)

如果你能這樣指導這是最好的路徑內工作。有處理登錄屏幕的具體建議。如果您不得不提供主頁按鈕功能,要小心你如何應用這一點,因爲驗證者正在將應用程序敲回去,以便在導航方面以意想不到的方式行事。我覺得如果這個功能在主頁按鈕後面,你應該在驚喜部門確定。隨着時間的推移,我們將看到認證。可以說,「註銷」方案同樣適用。

這裏有三種方法,從Richard Woo,Maarten Struys,Sam Jarawan

+0

感謝米克「裝」事件。我期待在它回來後閱讀這篇文章。我很難看到登錄和註銷這種非常典型的情況,特別是在對遠程資源進行身份驗證時,它符合我一直在閱讀的有關Windows Phone導航規則的內容。 – dkackman 2010-10-23 04:42:05

+0

實際上有兩個職位,我上面編輯 - 閱讀順序。他的博客備份順便說一句。 – 2010-10-23 05:33:26

+1

看起來這個建議也是最近進入文檔的方式。 http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx – 2010-10-23 05:46:34

0

恐怕您無法清除堆疊的頁面,更重要的是,您的應用無法通過認證。 More info

3

此代碼工作得很好(它需要在你的頁面),還沒有嘗試過把它過去的認證還沒有,但是代碼沒有問題:

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

這似乎與documentation不同,其中說,如果沒有更多項目,則會發生異常,因此我在用戶語音上輸入logged a bug,因此未來可能會更改。

0

更簡單的方法只是清除返回堆棧是做到以下幾點

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

注意的是,如果你這樣做在裝載的情況下,將火每次頁面導航到並再次單擊後面會關閉應用程序!

重要提示:如果您使用webcontrol或NAX廣告系統,該頁面以及網頁控件都會佔用該backkey,因此將存在應用程序而不是返回到頁面。

**更新 也只是找到了一個更短的手版從MS開發中心

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

一個簡單的線條。尼斯

0

你應該爲你的頁面

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