Я создаю приложение Silver Light, используя шаблон приложения Navigation. Это для внутреннего использования и, следовательно, использует Windows authenticatoin. Существует страница панели инструментов, которая показывает пару записей, отфильтрованных по идентификатору пользователя, вошедшего в систему. Чтобы получить идентификатор пользователя (который является int), я вызываю веб-сервис, переопределяя GetAuthenticatedUser, и передаю имя пользователя (из IPrincipal). Эта услуга занимает некоторое время, чтобы вернуть детали.
Когда я перехожу к приложению панели мониторинга, оно полностью рендерится без данных, потому что пользовательский сервис является асинхронной операцией, и я не могу заставить рендеринг подождать до полного завершения работы моего 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));
}
Хотя я получаю подсказку с окном сообщения, она на самом деле не переводит меня на страницу входа, а остается на странице панели инструментов. Я также попытался положить этот код в OnNavigatedTo переопределить без удачи.
Я также попытался использовать NavigationService вместо Frame, как показано ниже, но безуспешно
if (!UserService.Current.User.IsAuthenticated)
{
MessageBox.Show("Navigating away");
this.NavigationService.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative));
}
это все еще не работает. Кто-нибудь знает, как сделать какую-то страницу доступной, только если у меня есть полностью действительный пользовательский объект? если они попытаются получить доступ к закрытой странице без этого, я хочу, чтобы они могли перенаправляться на страницу входа в систему, как этого можно достичь?
Я использую Silverlight 3 Beta
Shreedhar