2009-05-29 3 views
2

Я создаю приложение с серебряным светом, используя шаблон приложения для навигации. Он предназначен для внутреннего использования и, следовательно, использует windows authenticatoin. На странице панели мониторинга отображается пара записей, отфильтрованных при регистрации в идентификаторе пользователей. Чтобы получить идентификатор пользователя (который является int), я вызываю веб-службу, переопределяя GetAuthenticatedUser и передавая имя пользователя (из IPrincipal). Эта услуга занимает некоторое время, чтобы вернуть данные.Служба Silverlight Navigation and Authentication

Когда я перехожу к приложению панели инструментов, он полностью отображается без данных, потому что служба пользователя является асинхронной операцией, и я не могу сделать рендеринг до тех пор, пока мой 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 Beta

Shreedhar

ответ

1

я, наконец, нашел способ обойти это. В Constructo i Поднял обработчик события 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)); 
      } 
     } 
    } 

Этот фрагмент кода работает просто отлично!

Shreedhar