複数のコンピューターにまたがる永続性とは何の関係もないことは確かですが、2 回目の Web サイトへのアクセスで、Ajax 更新パネル内に表示されるように動的に読み込まれる質問と回答の更新がトリガーされるのは奇妙に思えます。
セッションの相互作用とロギング
Web.Config: <sessionState mode="InProc" cookieless="UseCookies" timeout="20" cookieName="ASPNET_Quiz" />
Global.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
Globals.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 を含むマスター ページがあり、Timer Tick イベント (間隔 = 1000) によって AsyncPostBack がトリガーされます。
コンテンツ ページには、サイトの質問と回答をラップする別の UpdatePanel があり、ビルドされた RadioButtonList の SelectedIndexChanged イベントに (コード ビハインドを介して) 登録された AsyncPostBack トリガーもあります。
サイトに 1 人しかアクセスしていない場合は問題ありません。別のユーザーがサイトにアクセスするとすぐに、Q&A が Quiz オブジェクトで再シャッフルされ、表示が再シャッフルされ、基本的に、未回答の質問がユーザーの現在の位置の上または下に表示されます。既に選択されている回答は変更されませんが、回答の順序が再シャッフルされます。Q&A のランダム化は、SProc を介して SQL Server 側で行われます。
2012-12-07 更新
- 上記の 3 つのコード セグメントすべてを、現在の設計を反映するように変更しました
- また、重要かどうかはわかりませんが、コンテンツ ページの UpdatePanel PostBackTrigger
AsyncPostBack
をPostBack
質問:
- これを修正するための提案はありますか? 問題があれば、サイトに PageRouting も組み込みました。
- .Net オブジェクトを保存するためのより良い方法はありますか? 重要なのは、Quiz オブジェクトに関連付けられた Q&A クラスが、Sproc が呼び出されるたびに動的に順序付けられることです。したがって、最初に提示されたときと同じ順序でそれらを維持する必要があります。
Application_BeginRequest
の代わりにQuiz オブジェクトを初期化する必要がありSession_Start
ますか?