我想在silverlight应用中的页面上显示有关用户的信息。我使用业务模板作为起点,我使用Windows身份验证作为我的身份验证方法。
如果我只是执行以下操作,我会收到有关尚未登录的错误(尚未加载WebContext.Current.User对象):
public Home()
{
InitializeComponent();
this.Title = ApplicationStrings.HomePageTitle;
txtOutput.Text = WebContext.Current.User.Name + Environment.NewLine;
foreach (string Role in WebContext.Current.User.Roles)
{
this.txtOutput.Text += Role + Environment.NewLine;
}
}
如果我执行以下操作,所有内容在第一次加载页面时都会正常加载,一切正常,但是如果我更改页面并返回,则因为我已经登录而无法加载:
public Home()
{
InitializeComponent();
this.Title = ApplicationStrings.HomePageTitle;
WebContext.Current.Authentication.LoggedIn += new EventHandler<AuthenticationEventArgs>(Authentication_LoggedIn);
}
void Authentication_LoggedIn(object sender, AuthenticationEventArgs e)
{
txtOutput.Text = WebContext.Current.User.Name + Environment.NewLine;
foreach (string Role in WebContext.Current.User.Roles)
{
this.txtOutput.Text += Role + Environment.NewLine;
}
}
我能够让它工作的唯一方法是使用以下代码,对我来说有点脏:
public Home()
{
InitializeComponent();
this.Title = ApplicationStrings.HomePageTitle;
if (WebContext.Current.User.IsAuthenticated)
{
Authentication_LoggedIn(null, null);
}
else
{
WebContext.Current.Authentication.LoggedIn += new EventHandler<AuthenticationEventArgs>(Authentication_LoggedIn);
}
}
void Authentication_LoggedIn(object sender, AuthenticationEventArgs e)
{
txtOutput.Text = WebContext.Current.User.Name + Environment.NewLine;
foreach (string Role in WebContext.Current.User.Roles)
{
this.txtOutput.Text += Role + Environment.NewLine;
}
}
有人能指出我正确的方向“正确”的做法。我喜欢坚持最佳实践,这似乎不是它。
谢谢!