通过回发但特定于页面用户的变量的持久性
Posted
技术标签:
【中文标题】通过回发但特定于页面用户的变量的持久性【英文标题】:Persistence of a variable through post backs but specific to the user of the page 【发布时间】:2012-07-11 13:01:58 【问题描述】:我正在开发一个带有 .aspx 页面和 VB.Net 代码的网站。在一个页面上,我需要一个公共共享变量,例如
Public Shared comments As String() = New String(2) "", "", ""
因为我需要通过页面的回帖来持久化“cmets”的值。至少我认为公开共享是保持持久性的唯一方法,除非你们告诉我我错了。
但另一方面,我不希望可能使用同一页面的其他用户与其他用户的“cmets”数据发生冲突。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:这取决于您需要的持久性水平。
如果您只需要 cmets 在页面上驻留直到用户离开它,请使用您页面的 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
如果您希望即使在会话过期并且用户稍后返回后也能保持这种状态,您需要写入将用户链接到他们的 cmets(例如数据库)的后备存储,或者 - 并且我这样说的热情要少得多——写出类似 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 之类的数据绑定控件来显示信息。
【讨论】:
以上是关于通过回发但特定于页面用户的变量的持久性的主要内容,如果未能解决你的问题,请参考以下文章