2016-05-20 16 views
1

私は自分のWebサイトへのログインに便利な「ユーザーコントロール」を作成し、サイトマスターに配置しました。ポストバックが発生してセッションが作成され、ページロードイベントがASP.NETで正しくセッションを使用しない

ユーザがウェブサイトにログインし、フルネームを含むウェルカムメッセージでアナウンスする必要があります。フルネームは、ユーザーがログオンしたときに作成されたセッション変数に当然入るはずです。

「page_load」イベントに希望のコードを置き、ウェルカムメッセージを表示/表示するために、適切な状況(ここではlblFullNameというラベル)にユーザーのフルネームを渡すことは間違いありませんログインボタンがクリックされたときに、フルネームはユーザが再びウェブサイトにログインするまで渡されません(2回目)。

なぜこの問題が発生するのですか?

その私のコードの一部:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["FullName"]==null) 
     { 
      //nothing 2 do. 
     } 
     else 
     { 
      lblFullName.Text = Session["FullName"].ToString(); 
     } 
    } 

答えて

1

Page_Loadイベントが処理された後にそれがするまで、ユーザー名は表示されませんように、あなたはおそらく、ユーザーコントロールにセッション変数を設定次のポストバック。

とすぐログインが検証されるとラベルのテキストを更新するために、あなたはできます

  1. はメインページ
  2. コールでイベントハンドラを登録したユーザーコントロール
  3. でイベントを定義します。すぐに、ユーザはイベントハンドラで
  4. にログインしているように、イベントハンドラ、ラベルのテキスト

あなたの共同を更新uldはEventArgs派生クラスのユーザーフルネームを渡してSession変数を削除します。ユーザーコントロールで、メインフォームで次のクラスにアクセスできるようにした場合:ログインが確認された機能で

public event EventHandler<StringEventArgs> UserLoggedIn; 

public class StringEventArgs : EventArgs 
{ 
    public string Value { get; set; } 

    public StringEventArgs(string value) 
    { 
     Value = value; 
    } 
} 

は、ユーザー・コントロールでこのイベントを定義することができます、あなたはイベントハンドラを呼び出す:メインページで

private void UserLoginValidation() 
{ 
    // Login validation is done here 
    bool loginSuccessful = ... 

    if (loginSuccessful && UserLoggedIn != null) 
    { 
     UserLoggedIn(this, new StringEventArgs(fullName)); 
    } 
} 

を、あなたはラベルを更新し、イベントハンドラを登録:

protected void Page_Load(object sender, EventArgs e) 
{ 
    loginUserControl1.UserLoggedIn += loginUserControl1_UserLoggedIn; 
    ... 
} 

private void loginUserControl1_UserLoggedIn(object sender, StringEventArgs e) 
{ 
    lblFullName.Text = e.Value; 
} 
+0

私は解決策に従って、正しく動作します。どうもありがとう。 –

+0

しかし、私はASP.NETとC#の環境に新しいので、何が起こったのか正確には理解できませんでした。同じセッションコンセプトを使用するより簡単な方法はありますか? –

+0

はい、セッション変数を使用できます。しかし、それは私の解決策ほどきれいではありません。値を関数の引数として渡すことは、セッション変数を使用するよりも優れています。グローバル変数は、他のソリューションが機能しない場合にのみ使用してください。いずれにしても、(1) 'StringEventArgs'を作成しないでください。(2)' Session ["FullName"] = fullName;で 'UserLoggedIn(this、new StringEventArgs(fullName)); UserLoggedIn(this、EventArgs.Empty); '、(3)' lblFullName.Text = e.Value;を 'lblFullName 'に置き換えます。Text =(string)Session ["FullName"]; '(' StringEventArgs'の代わりに '' EventArgs''を使用します)。 – ConnorsFan

関連する問題