2009-05-29 4 views
2

탐색 응용 프로그램 템플릿을 사용하여 실버 라이트 응용 프로그램을 만듭니다. 그것은 내부 용이므로 Windows authenticatoin을 사용합니다. 로그인 한 사용자 ID로 필터링 된 레코드 몇 개를 보여주는 대시 보드 페이지가 있습니다. 사용자 ID (int)를 얻기 위해 GetAuthenticatedUser를 재정 의하여 웹 서비스를 호출하고 IPrincipal에서 사용자 이름을 전달합니다. 이 서비스는 세부 정보를 반환하는 데 약간의 시간이 걸립니다.Silverlight 탐색 및 인증 서비스

대시 보드 앱으로 이동하면 사용자 서비스가 비동기 작업이고 GetAuthenticatedUser가 완전히 완료 될 때까지 렌더링을 대기 상태로 만들 수 없기 때문에 데이터가 전혀 표시되지 않습니다. 그래서 로그인 페이지를 만들었습니다.이 로그인 페이지는 사용자 개체를 가져 와서 대시 보드로 이동할 때까지 진행률 표시 줄을 보여줍니다. 다른 사용자가 URL을 사용하여 대시 보드에 직접 액세스하려고하면 로그인 페이지로 다시 이동하기를 원합니다.

그래서 대시 보드 생성자에서 나는 메시지 상자 프롬프트가 Thogh, 실제로 페이지를 로그인 할 날 데려가하지만 대시 보드 페이지에 유지하지 않는 다음 코드를

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

을 추가했다. OnNavigatedTo에이 코드를 넣으려고했지만 행운이 없습니다.

는 또한 여전히 작동하지 않는 행운

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

로, 아래 프레임 대신 NavigationService를 사용했습니다. 누구든지 일부 페이지를 액세스 할 수 있도록하는 방법을 알고 완전히 유효한 사용자 개체가있는 경우에만? 이 페이지가 제한된 페이지에 액세스하려고하면 로그인 페이지로 리디렉션 할 수 있기를 바랍니다. 어떻게이 작업을 수행 할 수 있습니까?

내가 실버 라이트 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)); 
      } 
     } 
    } 

이 코드 조각은 정상적으로 작동합니다.

shreedhar