2009-09-12 7 views
0

Travail sur un test en ligne.Test en ligne avec ASP.NET/Linq

J'ai 3 tables

  1. Questions
  2. Sujet
  3. Sujet

J'ai fait une procédure stockée qui renvoie 25 enregistrements aléatoires. Je veux le stocker en mémoire puis afficher une 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é et stocké le résultat dans viewstate mais je ne suis pas capable de le rejeter. si j'utilise

Dim qus = from viewstate("questions") 

cela fonctionne, mais cela ne fonctionne pas lorsque je récupère 1 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é couler l'objet à

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

mais je reçois 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 erronée.

Cordialement

Répondre

0

IMO, vous êtes sur-ingénierie. Pourquoi essayer de garder les données en mémoire? Pourquoi ne pas écrire chaque question à une div, puis masquer toutes les divs de questions, sauf pour la "question en cours".

Beaucoup plus facile à implémenter et vous ne touchez pas le serveur avec plusieurs appels AJAX. Cela rend beaucoup plus facile la sauvegarde de l'état (questions précédemment répondues, etc.).

+0

merci pour la réponse, oui je suis sur l'ingénierie, donc devrais-je utiliser jquery pour cacher div ou ajax fera. –

+0

Plain JavaScript ou JQuery ferait ... – mmattax

0

Avez-vous essayé d'utiliser simplement Session pour maintenir l'état? Y a-t-il une exigence qui vous interdit de le faire?

Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))