我正在使用導航應用程序模板創建銀色燈光應用程序。它用於內部使用,因此使用Windows驗證。有一個儀表板頁面,顯示幾個記錄過濾登錄用戶ID。要獲取用戶ID(這是一個int),我通過覆蓋GetAuthenticatedUser並傳遞用戶名(來自IPrincipal)來調用Web服務。此服務需要一些時間才能返回詳細信息。Silverlight導航和身份驗證服務
當我導航到儀表板應用程序時,它完全沒有數據呈現,因爲用戶服務是一個異步操作,我無法使渲染等到我的GetAuthenticatedUser完成完成。所以我創建了一個登錄頁面,它只顯示一個進度條,直到我獲得用戶對象,然後導航到儀表板。如果有人試圖通過使用URL直接訪問儀表板,我希望他們回到登錄頁面。
所以在儀表板的構造函數添加以下代碼
if (!UserService.Current.User.IsAuthenticated)
{
MessageBox.Show("Navigating away");
Frame objContainer = this.Parent as Frame;
objContainer.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative));
}
Thogh我得到的消息框提示,它實際上並沒有帶我到登錄頁面,但停留在儀表板頁面。我也試着把這個代碼放在OnNavigatedTo覆蓋沒有運氣。
我也嘗試過使用框架的NavigationService代替如下,沒有運氣
if (!UserService.Current.User.IsAuthenticated)
{
MessageBox.Show("Navigating away");
this.NavigationService.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative));
}
它仍然無法正常工作。有沒有人知道如何讓一些頁面可訪問,只有當我有完全有效的用戶對象?如果他們嘗試訪問受限制的頁面而沒有這樣做,我希望他們能夠重定向到登錄頁面,這怎麼能夠實現?
我使用Silverlight 3測試版
Shreedhar