使用ASP.NET / Linq进行在线测试

时间:2009-09-12 12:27:57

标签: asp.net linq in-memory

进行在线测试。

我有3张桌子

  1. 问题
  2. 主题
  3. 主题
  4. 我制作了一个存储过程,返回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

    如果我的在线测试方法有误,请提供帮助,或者是否还有其他方法可以做。

    此致

2 个答案:

答案 0 :(得分:0)

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

Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))

答案 1 :(得分:0)

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

更容易实现,并且您没有使用多个AJAX调用来访问服务器,这也使得保存状态(以前回答的问题等)变得更加容易。