Prueba en línea usando ASP.NET / Linq
Pregunta
Trabajando en una prueba en línea.
Tengo 3 mesas
- Preguntas
- Asunto
- 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
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))