通过post backs持久化变量,但特定于页面用户

时间:2012-07-11 20:09:51

标签: vb.net persistence shared public

我正在开发一个网站,其中.aspx页面和代码隐藏在VB.Net中。在页面上,我需要一个像

这样的公共共享变量
Public Shared comments As String() = New String(2) {"", "", ""}

因为我需要通过页面的帖子支持“评论”的持久性。至少我认为让它公开共享是保持持久性的唯一方法,除非你们告诉我我错了。

但另一方面,我不希望可能使用同一页面的其他用户与其他用户冲突他们的“评论”数据。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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

但是,在使用后备存储时,我通常建议使用其中一个数据源控件以及数据绑定控件(如ListView或GridView)来显示信息。