Я хочу отобразить информацию о пользователе на странице в приложении Silverlight.Я использую бизнес-шаблон в качестве отправной точки и использую проверку подлинности Windows в качестве метода проверки подлинности.
Если я просто делаю следующее, я получаю ошибки о том, что я еще не вошел в систему (WebContext.Current.Пользовательский объект еще не загружен):
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;
}
}
Может ли кто-нибудь указать мне правильное направление «правильного» способа сделать это.Мне нравится придерживаться лучших практик, и, похоже, это не так.
Спасибо!