Онлайн-тест с использованием ASP.NET / Linq
Вопрос
Работаю над онлайн-тестом.
У меня есть 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.Перечисляемый+где electenumerableiterator`2
Пожалуйста, ПОМОГИТЕ или, если есть какой-либо другой способ сделать это, если мой метод проведения онлайн-теста неверен.
С уважением
Решение
ИМО, ты переоцениваешь это.Зачем морочить голову, пытаясь сохранить данные в памяти?Почему бы не записать каждый вопрос в div, а затем скрыть все разделы вопросов, за исключением "текущего вопроса".
Намного проще реализовать, и вы не запускаете сервер несколькими вызовами AJAX, это также значительно упрощает сохранение состояния (ранее отвеченные вопросы и т.д.).
Другие советы
Вы пробовали просто использовать сеанс для поддержания состояния?Есть ли требование, которое запрещает вам делать это?
Dim qus = CType(Me.Session("questions"), IQueryable(Of PM_SelectRandomQuestionFMResult))