Pregunta

Trabajando en una prueba en línea.

Tengo 3 mesas

  1. Preguntas
  2. Asunto
  3. Tema

He realizado un procedimiento almacenado que devuelve 25 registros aleatorios. Quiero almacenarlo en la memoria y luego mostrar 1 pregunta a la vez con AJAX. No quiero llegar a la base de datos 25 veces, ya que hay muchos usuarios. Intenté almacenar el resultado en viewstate, pero luego no puedo volver a enviarlo. si uso

Dim qus = from viewstate("questions") 

funciona, pero no funciona cuando recupero 1 registro a la 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

Intenté enviar el objeto a

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

pero luego aparece este error

  

System.Linq.Enumerable + WhereSelectEnumerableIterator`2

Por favor, AYUDA o si hay algún otro método para hacerlo, si mi método de hacer la prueba en línea es incorrecto.

Saludos

¿Fue útil?

Solución

OMI, estás sobreingeniería de esto. ¿Por qué perder el tiempo tratando de mantener los datos en la memoria? ¿Por qué no escribir cada pregunta en un div y luego ocultar todos los divs de la pregunta, excepto la " pregunta actual " ;.

Mucho más fácil de implementar y no está llegando al servidor con varias llamadas AJAX. Esto también hace que el estado de guardado (preguntas respondidas previamente, etc.) sea mucho, mucho más fácil.

Otros consejos

¿Has intentado usar Session para mantener el estado? ¿Existe algún requisito que le prohíba hacer esto?

Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top