0

我想在登录后获取用户名,但它不起作用。

public partial class Login : System.Web.UI.Page
    {
        string strUser;

        protected void Login1_LoggedIn(object sender, EventArgs e)
        {
            strUser = Membership.GetUser().UserName;

            Response.Redirect("Home");
        }
        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            strUser = Membership.GetUser().UserName;
            Response.Redirect("Home");
        }
    }

这是我的错误: 在此处输入图像描述

4

2 回答 2

1

Membership.GetUser().UserName为 null,因为新的主体对象尚未附加到当前的 HttpContext 对象。

因此,您需要使用控件中的用户名显式检索该最近登录的用户Login

更新:归功于 jadarnel27

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
  // Get the username from login control and retrieves the user info explicitly
  Membership user = Membership.GetUser(Login1.Username); 
  ...
}
于 2013-03-26T18:07:49.963 回答
0

您需要检查并确保用户登录成功。看起来您只是在使用标准的 ASP.NET 成员资格,所以这应该可以工作:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    if(e.Authenticated)
    {
        strUser = Membership.GetUser().UserName;
        Response.Redirect("Home");
    }
    else
    {
        strUser = "Login Failed!";
    }
}

自从我使用这些控件已经有一段时间了,但您可能需要先确定e.Authenticated自己的价值并进行设置。如果是这样,你需要把它放在我上面写的 if-block 之前:

bool authenticated = Membership.ValidateUser(Login1.UserName, Login1.Password);
e.Authenticated = authenticated;

我认为普通的 ASP.NET 成员可以为您处理这部分;如果您使用的是自定义身份验证方案,则肯定需要执行该步骤。

于 2013-03-26T15:06:27.517 回答