1

私は .aspx ページと VB.Net のコード ビハインドを含む Web サイトに取り組んでいます。ページには、次のような Public Shared 変数が必要です

Public Shared comments As String() = New String(2) {"", "", ""}

ページのポストバックを通じて「コメント」の値を永続化する必要があるためです。少なくとも、皆さんが私が間違っていると言わない限り、永続性を維持する唯一の方法はそれをパブリック共有にすることだと思います。

しかし一方で、同じページを使用している可能性のある他のユーザーが、他のユーザーと「コメント」データを競合させたくありません。どうすればこれを達成できますか?

4

1 に答える 1

2

それはあなたが必要とする持続性のレベルに依存します。

ユーザーがページから移動するまでコメントをページに表示するだけでよい場合は、ページのViewStateを使用します。

Public Property Comments As String()
    Get
        If Me.ViewState("Comments") Is Nothing Then
            Me.ViewState("Comments") = New String(2) {"", "", ""}
        End If
        Return Me.ViewState("Comments")
    End Get
    Set(value As String())
        Me.ViewState("Comments") = value
    End Set
End Property

ナビゲートしてからページに再度アクセスするまでの間(つまり、ポストバックではなく初期ロード)、ページの値を保持する場合は、セッション状態バッグを使用します。

Public Property Comments As String()
    Get
        If Me.Session("MyPage_Comments") Is Nothing Then
            Me.Session("MyPage_Comments") = New String(2) {"", "", ""}
        End If
        Return Me.Session("MyPage_Comments")
    End Get
    Set(value As String())
        Me.Session("MyPage_Comments") = value
    End Set
End Property

セッションが期限切れになり、ユーザーが後で戻った後もこれを維持したい場合は、データベースなどのコメントにユーザーをリンクするバッキングストアに書き込む必要があります。あまり熱意を持っていない-XMLファイルのようなものに書き出してから、次のようなステートメントで最初のページの読み込み時に値を読み込みます。

 Public Sub PageLoad(sender As Object, e As EventArgs) Handles Me.Load
     If Not Me.IsPostBack
         ' Read the value from the backing store
     End If
 End Sub

ただし、バッキングストアを使用する場合は、通常、データソースコントロールの1つを、ListViewやGridViewなどのデータバインドされたコントロールと一緒に使用して情報を表示することをお勧めします。

于 2012-07-12T13:54:48.980 に答える