ASP.NET / Linqを使用したオンラインテスト
質問
オンラインテストの実施。
3つのテーブルがあります
- 質問
- 件名
- トピック
25個のランダムレコードを返すストアドプロシージャを作成しました。メモリに保存し、AJAXで一度に1つの質問を表示したいです。多くのユーザーがいるため、25回データベースにアクセスしたくありません。結果をビューステートに保存してみましたが、それを元に戻すことができません。使用する場合
Dim qus = from viewstate("questions")
動作しますが、一度に1つのレコードを取得すると動作しません。
コード:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
ViewState.Add("QuestionNo", 0)
Dim qus = From q In PML.PM_SelectRandomQuestionFM Select q
viewstate.add("questions",qus)
LoadQuestion(0)
End If
End Sub
Private Sub LoadQuestion(ByVal i As Integer)
Dim QuestionNo As Integer = CType(ViewState("QuestionNo"), Integer) + 1
Try
If QuestionNo <= 25 Then
Dim qus = viewstate("questions")
Me._subjectTopic.Text = String.Format("<b>Subject:</b> {0} -- <b>Topic:</b> {1}", qus(i).subjectName, qus(i).TopicName)
Me._question.Text = " " & qus(i).Question
Me._answer1.Text = " " & qus(i).Answer1
Me._answer2.Text = " " & qus(i).Answer2
Me._answer3.Text = " " & qus(i).Answer3
Me._answer4.Text = " " & qus(i).Answer4
Me._questionNo.Text = String.Format("Question No. {0} / 25", QuestionNo)
ViewState.Add("QuestionNo", QuestionNo)
Else
Server.Transfer("freeMemberResult.aspx")
End If
Catch ex As Exception
Throw New System.Exception(ex.ToString)
End Try
End Sub
オブジェクトをキャストしようとしました
Dim qus = CType(ViewState("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))
しかし、このエラーが表示される
System.Linq.Enumerable + WhereSelectEnumerableIterator`2
オンラインテストを行う私の方法が間違っている場合は、助けてください、または他の方法がある場合は、ください。
よろしく
解決
IMO、あなたはこれを過剰に設計しています。メモリにデータを保持しようとするのはなぜですか?各質問をdivに書き込み、「現在の質問」を除くすべての質問divを非表示にします。
実装がはるかに簡単で、複数のAJAX呼び出しでサーバーにアクセスすることはありません。これにより、状態(以前に回答した質問など)を非常に簡単に保存できます。
他のヒント
セッションを使用して状態を維持しようとしましたか?これを行うことを禁止する要件はありますか?
Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))
所属していません StackOverflow