我正在使用导航应用程序模板创建银色灯光应用程序。它用于内部使用,因此使用Windows验证。有一个仪表板页面,显示几个记录过滤登录用户ID。要获取用户ID(这是一个int),我通过覆盖GetAuthenticatedUser并传递用户名(来自IPrincipal)来调用Web服务。此服务需要一些时间才能返回详细信息。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覆盖没有运气。
我也尝试过使用框架的NavigationService代替如下,没有运气
if (!UserService.Current.User.IsAuthenticated)
{
MessageBox.Show("Navigating away");
this.NavigationService.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative));
}
它仍然无法正常工作。有没有人知道如何让一些页面可访问,只有当我有完全有效的用户对象?如果他们尝试访问受限制的页面而没有这样做,我希望他们能够重定向到登录页面,这怎么能够实现?
我使用Silverlight 3测试版
Shreedhar