进行在线测试。
我有3张桌子
我制作了一个存储过程,返回25条随机记录。我想将它存储在内存中,然后使用AJAX一次显示1个问题。由于有很多用户,我不想打25次数据库,我尝试将结果存储在viewstate中,但后来我无法将其转换回来。如果我使用
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
如果我的在线测试方法有误,请提供帮助,或者是否还有其他方法可以做。
此致
答案 0 :(得分:0)
您是否尝试过使用Session维护状态?是否有要求禁止您这样做?
Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))
答案 1 :(得分:0)
IMO,你过度设计了这个。为什么要试图将数据保存在内存中呢?为什么不将每个问题写入div,然后隐藏除“当前问题”之外的所有问题div。
更容易实现,并且您没有使用多个AJAX调用来访问服务器,这也使得保存状态(以前回答的问题等)变得更加容易。