我正在一个网站上工作,其中包含 .aspx 页面和 VB.Net 中的代码。在一个页面上,我需要一个公共共享变量,例如
Public Shared comments As String() = New String(2) {"", "", ""}
因为我需要通过页面的回帖来持久化“评论”的价值。至少我认为公开共享是保持持久性的唯一方法,除非你们告诉我我错了。
但另一方面,我不希望可能使用同一页面的其他用户与其他用户的“评论”数据发生冲突。我怎样才能做到这一点?
我正在一个网站上工作,其中包含 .aspx 页面和 VB.Net 中的代码。在一个页面上,我需要一个公共共享变量,例如
Public Shared comments As String() = New String(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 之类的数据绑定控件来显示信息。