2

NullReferenceException当我尝试创建在事件Session中使用的变量时,我得到了。登录页面是自动创建的。问题是正在返回。我不知道为什么,因为如果我删除此代码并正常登录,我将不会从中获得,只有当我使用此事件时。Membership.GetUser()LoginUser_LoggedInMembership.GetUser().UserNamenullnull

所以,我希望能够获取登录用户的用户名,这样我就可以在LoggedIn事件中创建这些会话变量

protected void LoginUser_LoggedIn(object sender, EventArgs e)
    {
        Session["PersonPID"] = con.GetPerson(Membership.GetUser().UserName.ToString()).PID;
        Session["PersonFirstName"] = con.GetPerson(Membership.GetUser().UserName).FirstName;
        Session["PersonLastName"] = con.GetPerson(Membership.GetUser().UserName).LastName;
        Session["PersonDob"] = con.GetPerson(Membership.GetUser().UserName).Dob;
        Session["PersonTown"] = con.GetPerson(Membership.GetUser().UserName).Town;
        Session["PersonGender"] = con.GetPerson(Membership.GetUser().UserName).Gender;
        Session["PersonUname"] = Membership.GetUser().UserName;
        Session["PersonImageUrl"] = con.GetPerson(Membership.GetUser().UserName).ImageUrl;
        Session["PersonPres"] = con.GetPerson(Membership.GetUser().UserName).Pres;
    }
4

2 回答 2

0

从用于登录的文本框中获取它 string userName = (LoginUser.FindControl("UserName") as TextBox).Text;

这里的问题似乎是用户尚未完全通过身份验证(它的值尚未显示在成员资格类中)。此外,用户的个人资料尚未加载,因此我们也无法获取个人资料日期。

在我看来,有点让这个事件变得毫无意义。

注意:我们必须从表单中的文本框中获取用户名值,但这被它的父控件隐藏,因此 parentControl.FindControl(textbox)

你也可以这样做是你想要非常通用

控制 ctrl = ((System.Web.UI.Control)sender); 字符串用户名 = ((System.Web.UI.WebControls.TextBox)ctrl.FindControl("UserName")).Text;

于 2013-05-15T10:21:09.113 回答
0

我宁愿建议,首先您在方法中验证用户凭据,该方法将在成功登录LoginUser_Authenticate()后将您重定向到方法。LoginUser_LoggedIn()在那里您可以获取当前用户名并设置为您的会话变量。

protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e)
{
    if (Login1.UserName == "SomeUser1" && Login1.Password == "password123")
    {
        e.Authenticated = true;
    }

    else
    {
        e.Authenticated = false;
    }
}

protected void LoginUser_LoggedIn(object sender, EventArgs e)
{
    Session["PersonPID"] = con.GetPerson(Login1.UserName).PID;
    Session["PersonFirstName"] = con.GetPerson(Login1.UserName).FirstName;
    Session["PersonLastName"] = con.GetPerson(Login1.UserName).LastName;
    Session["PersonDob"] = con.GetPerson(Login1.UserName).Dob;
    Session["PersonTown"] = con.GetPerson(Login1.UserName).Town;
    Session["PersonGender"] = con.GetPerson(Login1.UserName).Gender;
    Session["PersonUname"] = Login1.UserName;
    Session["PersonImageUrl"] = con.GetPerson(Login1.UserName).ImageUrl;
    Session["PersonPres"] = con.GetPerson(Login1.UserName).Pres;
}
于 2013-05-15T14:06:17.467 回答