0

进行在线测试。

我有 3 张桌子

  1. 问题
  2. 学科
  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

如果我进行在线测试的方法错误,请帮助或是否有其他方法可以做到这一点。

问候

4

2 回答 2

0

您是否尝试过仅使用 Session 来维护状态?是否有禁止您这样做的要求?

Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))
于 2009-09-12T12:44:11.077 回答
0

IMO,您对此进行了过度设计。为什么要搞砸试图将数据保存在内存中?为什么不将每个问题写入一个 div,然后隐藏除“当前问题”之外的所有问题 div。

实现起来要容易得多,而且您不会通过多次 AJAX 调用来访问服务器,这也使保存状态(以前回答的问题等)变得非常容易。

于 2009-09-12T13:20:02.093 回答