Pergunta

Trabalho em um teste on-line.

Eu tenho 3 tabelas

  1. Perguntas
  2. Assunto
  3. Tópico

Eu fiz um procedimento armazenado que retorna 25 registros aleatórios. Eu quero guardá-la na memória e, em seguida, exibir uma pergunta de cada vez com AJAX. Eu não quero a base de dados hit 25 vezes, pois há muitos usuários, eu tentei e armazenar o resultado em viewstate, mas então eu não sou capaz de lançá-lo de volta. se eu usar

Dim qus = from viewstate("questions") 

ele funciona, mas ele não funciona quando eu recuperar 1 registro de cada vez.

Código:

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

Eu tentei converter o objeto para

Dim qus = CType(ViewState("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult)) 

mas então eu recebo este erro

System.Linq.Enumerable + WhereSelectEnumerableIterator`2

Por favor, ajude ou se houver qualquer outro método para fazê-lo, se o meu método de fazer teste online é errado.

Saudações

Foi útil?

Solução

IMO, você está over-engenharia isso. Por parafuso em torno tentando manter os dados na memória? Por que não escrever cada pergunta a um div, e depois esconder todas as perguntas divs, exceto para a "questão atual".

Muito mais fácil de implementar e você não está batendo o servidor com várias chamadas AJAX, esta também fazer poupança estado (perguntas previamente respondidas, etc) muito, muito mais fácil.

Outras dicas

Você já tentou apenas usando Session para manter o estado? Existe uma exigência de que o proíbe de fazer isso?

Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top