Test en ligne avec ASP.NET / Linq
Question
Travailler sur un test en ligne.
j'ai 3 tables
- Questions
- Objet
- 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
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))