Question

Travailler sur un test en ligne.

j'ai 3 tables

  1. Questions
  2. Objet
  3. Sujet

J'ai créé une procédure stockée qui renvoie 25 enregistrements aléatoires. Je veux le stocker en mémoire et ensuite afficher 1 question à la fois avec AJAX. Je ne veux pas frapper la base de données 25 fois car il y a beaucoup d'utilisateurs, j'ai essayé de stocker le résultat dans viewstate mais je ne suis pas en mesure de le renvoyer. si j'utilise

Dim qus = from viewstate("questions") 

cela fonctionne, mais cela ne fonctionne pas lorsque je récupère un enregistrement à la fois.

Code:

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

J'ai essayé de convertir l'objet en

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

mais j'obtiens cette erreur

  

System.Linq.Enumerable + WhereSelectEnumerableIterator`2

S'il vous plaît HELP ou s'il existe une autre méthode pour le faire, si ma méthode de test en ligne est incorrecte.

Cordialement

Était-ce utile?

La solution

OMI, vous êtes trop ingénieux. Pourquoi déconner d'essayer de conserver les données en mémoire? Pourquoi ne pas écrire chaque question dans un div, puis masquer tous les divs de la question, à l’exception de la "question actuelle".

Beaucoup plus facile à mettre en œuvre et vous ne frappez pas le serveur avec plusieurs appels AJAX, cela facilite également beaucoup la sauvegarde de l’état (questions précédemment répondues, etc.).

Autres conseils

Avez-vous essayé d'utiliser simplement Session pour maintenir l'état? Existe-t-il une exigence qui vous en empêche?

Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top