Онлайн тестирование с использованием ASP.NET / Linq - PullRequest
0 голосов
/ 12 сентября 2009

Работа над онлайн-тестом.

У меня есть 3 таблицы

  1. Вопросы * * 1006
  2. Тема
  3. Тема

Я сделал хранимую процедуру, которая возвращает 25 случайных записей. Я хочу сохранить его в памяти, а затем отобразить 1 вопрос за один раз с AJAX. Я не хочу попадать в базу данных 25 раз, так как есть много пользователей, я пытался сохранить результат в viewstate, но потом я не смог его вернуть. если я использую

Dim qus = from viewstate("questions") 

это работает, но не работает, когда я получаю 1 запись за раз.

Код:

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

Я пытался привести объект к

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

но тогда я получаю эту ошибку

System.Linq.Enumerable + WhereSelectEnumerableIterator`2

Пожалуйста, ПОМОГИТЕ или, если есть какой-либо другой способ сделать это, если мой метод проведения онлайн-теста неверен.

Привет

Ответы [ 2 ]

0 голосов
/ 12 сентября 2009

ИМО, ты переусердствовал в этом. Зачем болтаться, пытаясь удержать данные в памяти? Почему бы не написать каждый вопрос в div, а затем спрятать все div вопросов, кроме «текущего вопроса».

Гораздо проще реализовать, и вы не подключаетесь к серверу несколькими AJAX-вызовами. Это также значительно упрощает сохранение состояния (ранее отвеченные вопросы и т. Д.)

0 голосов
/ 12 сентября 2009

Вы пытались просто использовать Session для поддержания состояния? Есть ли требование, которое запрещает вам делать это?

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