2011-01-14 13 views
1
Partial Class Preferences_MyPreferences 
    Inherits System.Web.UI.Page 

    Dim userID As String = Session("UserID") 

これはasp.netの単なるページです。セッション(「UserID」)を取得できるようにしたいのですが、試行するたびにこのエラーが発生します:セッション変数を取得できません。

セッション状態は、enableSessionStateがtrueに設定されている場合、 Pageディレクティブ。 System.Web.SessionStateModuleまたはカスタムセッション状態モジュールがアプリケーション構成の\\セクションに含まれていることも確認してください。

Dim UserIDをPage_Loadイベントの中に入れても問題ありません。なぜそれはイベントの中にいなければならないのですか?私は一度それを薄暗くして、ページ全体でそれを使用したい。

答えて

3

コード内のプロパティでSessionへの呼び出しをラップすることを検討してください。

Public ReadOnly Property UserID() As String 
    Get 
     Return Session("UserID") 
    End Get 
End Property 
1

あなたがそこに持っているとして、あなたがそれを宣言すると、変数が初期化され、セッション変数を使用のための準備ができて期待が、それはそれを可能にするためには時期尚早ページのライフサイクルのです。好ましい方法は、@ p.campbellが提案しているように、それをPropertyまたは同様の方法でラップすることです。しかし、この質問に答えるために、セッションが利用可能になる前にセッションを使用しようとしているため、例外が生成されます。

+0

感謝します、ありがとう! –

1

ASP.NET Page Lifecyclesにお読みください。 Sessionオブジェクトは、ページライフサイクルの特定の時点まで使用可能になりません。 UserIDを一度取得する場合は、セッションが利用可能になった後に行う必要があります。

あなたの例ではうまくいかない理由は、リクエストオブジェクトがページで利用できるようになる前に、Preferences_MyPreferencesページのコンストラクタが実行されるためです。代わりにPage_InitまたはPage_Loadイベント中にロードする必要があります。

+0

リンクありがとう、私は今それを得る:) –

関連する問題