我确定这与多台计算机之间的持久性无关,但似乎很奇怪,第二次网站访问会触发动态加载以显示在 Ajax 更新面板中的问题和答案的刷新。
会话交互和日志记录
网络配置: <sessionState mode="InProc" cookieless="UseCookies" timeout="20" cookieName="ASPNET_Quiz" />
全球.asax:
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
Session("test") = "true" 'Used only to create a static Session ID for references.
If (Globals.Quiz(Session) Is Nothing) Then
Globals.Quiz(Session) = New classes.Quiz(WebConfigurationManager.OpenWebConfiguration("~"))
End If
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the session ends
Globals.Quiz(Session) = Nothing
Session.Remove("test")
Session.Abandon()
End Sub
全局变量.vb
Module Globals
'Get/Set a Quiz object into the SessionState.
Public Property Quiz(sess As HttpSessionState) As Quiz
Get
Return CType(sess("quiz"), Quiz)
End Get
Set(value As Quiz)
sess("quiz") = value
End Set
End Property
End Module
我有一个带有 UpdatePanel 的母版页,用于根据数据库值倒计时分钟数,并且 AsyncPostBack 触发了 Timer Tick 事件(间隔 = 1000)
内容页面有一个不同的 UpdatePanel 围绕站点的 Question & Answers 包装,并且还有一个 AsyncPostBack 触发器(通过代码隐藏)注册到已构建的 RadioButtonList 的 SelectedIndexChanged 事件。
如果只有一个人访问该站点,则没有问题。一旦另一个用户访问该站点,就会在 Quiz 对象中重新排列问题和答案,然后重新排列它们的显示并基本上导致尚未回答的问题显示在用户当前位置的上方或下方。已经选择的答案不会改变,但答案的顺序会重新洗牌。问答的随机化植根于 SQL Server 端,通过 SProc。
2012-12-07 更新
- 更改了上面所有 3 个代码段以反映我当前的设计
- 此外,不确定是否重要,但将内容页面 UpdatePanel PostBackTrigger 从更改
AsyncPostBack
为PostBack
问题:
- 有什么建议可以解决这个问题吗?如果有任何问题,我还为该站点合并了 PageRouting。
- 是否有更好的方法来存储 .Net 对象,以便它们在回发中存活?关键是与 Quiz 对象关联的 Questions & Answers 类在每次调用 Sproc 时都是动态排序的。所以我需要让它们保持与它们首次出现时相同的顺序。
- 我应该在
Application_BeginRequest
而不是初始化 Quiz 对象Session_Start
吗?