2010-12-07 15 views
2

Webアプリケーションのページ内のいくつかの変数にアクセスする必要があります。変数の範囲はその特定のページにある。 どちらが解決策ですか?セッションまたはViewState?またはそれ以上の解決策?ページASP.NET内のスコープ変数

Private Property UserId() As Integer 
      Get 
       If Not ViewState("UserId") Is Nothing Then 
        Return CType(ViewState("UserId"), Integer) 
       Else 
        Return -1 
       End If 

      End Get 
      Set(ByVal Value As Integer) 
       ViewState("UserId") = Value 
      End Set 
     End Property 

または

Private Property UserId() As Integer 
    Get 
     If Not Session("UserId") Is Nothing Then 
      Return CType(Session("UserId"), Integer) 
     Else 
      Return -1 
     End If 

    End Get 
    Set(ByVal Value As Integer) 
     Session("UserId") = Value 
    End Set 
End Property 

そしてまた、ユーザーごとのViewStateのカスタムですか?

+1

なぜこれを行う必要がありますか?1つのリクエストから次のリクエストにこれを行う必要がありますか? –

+1

また、コードをそのようにフォーマットしないでください。 ">"を消し、全体を選択して "1/0/1"ツールを押してください。 –

答えて

7

ユーザーに固有の情報を多くのページに保存する場合は、Sessionを選択するとよいでしょう。クッキーを使用してユーザーを特定のセッションに結び付け、セッションがタイムアウトすることに留意してください。

ViewStateはHTMLの隠しフィールドに過ぎないため、ページが自身にポストバックするときにオブジェクトを保持するために使用できます。欠点は、データを文字列にシリアライズしてクライアントに送信することです(ポストバック時に検証されるので、それを改ざんすると例外がスローされます)。あなたの質問に答えるために、はい、ViewStateはページごとにユーザーごとです。

サイトのすべてのユーザーがアクセスするデータを格納する必要がある場合は、ApplicationストレージまたはHttpContext.Cacheが便利です。

これは簡単な要約です。オプションの詳細については、ASP.NET State Management Overviewをご覧ください。

+0

私は、pageのイベント中に変数の値にアクセスしたいと思います。私は共有共有を使用したくない。私はセッションとビューの状態について知っているので、多くのページで変数を必要としません。 – arlen