2009-05-29 5 views
2

Je crée une application Silverlight à l'aide du modèle d'application de navigation. Il est à usage interne et utilise donc windows authenticatoin. Il y a une page de tableau de bord qui montre quelques enregistrements filtrés par les utilisateurs connectés. Pour obtenir l'ID de l'utilisateur (qui est un int), j'appelle un service Web en remplaçant GetAuthenticatedUser et en passant le nom d'utilisateur (à partir de IPrincipal). Ce service prend un certain temps pour retourner les détails. Quand je navigue vers l'application de tableau de bord, il rend complètement sans données car le service de l'utilisateur est une opération asynchrone et je ne suis pas en mesure de faire attendre le rendu de mon GetAuthenticatedUser complètement. J'ai donc créé une page de connexion qui affiche juste une barre de progression jusqu'à ce que j'obtienne l'objet utilisateur, puis navigue vers le tableau de bord. Si quelqu'un tente d'accéder directement au tableau de bord en utilisant l'URL, je souhaite qu'il revienne à la page de connexion.Service de navigation et d'authentification Silverlight

donc dans le constructeur de tableau de bord, j'ajouté le code suivant

 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 Je reçois l'invite de boîte de message, il ne me prend pas en fait la page de connexion, mais reste dans la page du tableau de bord. J'ai également essayé de mettre ce code dans OnNavigatedPour surcharger sans aucune chance.

J'ai aussi essayé d'utiliser NavigationService au lieu de cadre comme ci-dessous, sans chance

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

ne fonctionne toujours pas. Est-ce que quelqu'un sait comment rendre une page accessible uniquement si j'ai un objet utilisateur entièrement valide? s'ils essaient d'accéder à la page restreinte sans cela, je veux qu'ils soient redirigés vers la page de connexion, comment cela peut-il être réalisé?

J'utilise Silverlight 3 Beta

Shreedhar

Répondre

1

J'ai finalement trouvé un moyen de contourner cela. Dans le Constructo i Hooked le gestionnaire d'événements Loaded et dans le gestionnaire d'événements, je navigue vers une page différente et cela fonctionne bien maintenant.

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)); 
      } 
     } 
    } 

Ce code fonctionne très bien!

Shreedhar

Questions connexes