2009-05-29 12 views
2

ナビゲーションアプリテンプレートを使用して銀色のライトアプリケーションを作成しています。これは内部使用のため、Windows authenticatoinを使用します。ログインしたユーザーIDでフィルタリングされたレコードの数を示すダッシュボードページがあります。ユーザーID(int)を取得するには、GetAuthenticatedUserをオーバーライドしてWebサービスを呼び出し、IPrincipalのユーザー名を渡します。このサービスは詳細を返すのに時間がかかります。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にこのコードを入れてみました。

は、私もそれはまだ動作しません運

 if (!UserService.Current.User.IsAuthenticated) 
     { 
      MessageBox.Show("Navigating away"); 
      this.NavigationService.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative)); 
     } 

と、以下のようにフレームの代わりのNavigationServiceを使用してみました。私は完全に有効なユーザーオブジェクトを持っている場合のみ誰もアクセス可能なページを作る方法を知っていますか?これを使わずに制限されたページにアクセスしようとすると、ログインページにリダイレクトできるようにしたいのですが、どのように達成できますか?

私はSilverlight 3のベータ版を使用しています

Shreedhar

答えて

1

私は最終的にこれを回避する方法を発見しました。 ConstructoではLoadedイベントハンドラを連結し、イベントハンドラでは別のページにナビゲートしていますが、現在は正常に動作しています。

public Dashboard() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(Dashboard_Loaded); 
    } 

    void Dashboard_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (!UserService.Current.User.IsAuthenticated) 
     { 
      Frame objContainer = this.Parent as Frame; 
      if (objContainer != null) 
      { 
       objContainer.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative)); 
      } 
     } 
    } 

このコードはうまく機能します。

シュレーダー

関連する問題