在Silverlight中,如何显示有关用户的信息?

时间:2011-12-14 01:19:07

标签: c# .net silverlight windows-authentication

我想在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;
        }
    }

有人能指出我正确的方向“正确”的做法。我喜欢坚持最佳实践,这似乎不是它。

谢谢!

0 个答案:

没有答案