2

イベントで使用している変数NullReferenceExceptionを作成しようとしているときに取得しています。ログインページは自動的に作成されます。問題は、それが返されることです。このコードを削除して通常どおりログインすると、このイベントを使用した場合にのみ、これから取得できないため、理由はわかりません。SessionMembership.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

最初に、ログインが成功した後にメソッドに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 に答える
0

ログインに使用するテキストボックスから取得します string userName = (LoginUser.FindControl("UserName") as TextBox).Text;

ここでの問題は、ユーザーがまだ完全に認証されていないことです (その値はまだメンバーシップ クラスに表示されていません)。また、ユーザーのプロファイルが読み込まれていないため、プロファイルの日付も取得できません。

私の意見では、イベントを少し無意味にしています。

注: フォームのテキスト ボックスからユーザー名の値を取得する必要がありますが、これは親コントロールによって隠されているため、parentControl.FindControl(textbox)

これを行うこともできます。これは、本当に一般的になりたい場合です

Control ctrl = ((System.Web.UI.Control)sender); String userName = ((System.Web.UI.WebControls.TextBox)ctrl.FindControl("UserName")).Text;

于 2013-05-15T10:21:09.113 に答える