我是一名为我们公司工作的noob程序员。我正在研究Quiz引擎进行培训。我有一些约90%构建的示例代码。我只需要调整一些东西。这就是我正在做的事情。
这是使用VB在ASP.net中构建的。我有一组问题,我是从数据库中提取的(使用内置的SQLDataSource绑定)。目前它的作用是提出问题,选择答案,然后单击“下一步”。然后它会提取下一个问题。列表等等......直到结束。数据库包含一个列,指出正确的答案是什么。当你点击下一步时,它会回答你正确答案的答案,存储它,然后继续下一个问题。最后,它会吐出正确答案和错误答案。
但是,这就是我想要做的。当用户选择一个答案并点击下一个时,它会立即打开一个小的新窗口(不是弹出窗口,而是同一页面上的窗口),立即“评分”该问题并在该窗口中显示是否正确。像这样的东西:
If selected answer = correctAnswer then
"That is correct"
Else
"THat is not correct. The correct answer is B"
End if
新窗口底部只包含一个“确定”按钮。当按下OK时,它会关闭该新窗口并处理“下一个”按钮编程要执行的其余操作。这是按钮:
<asp:Button ID="buttonNext" runat="server" Text="Next" /> </td>
以下是Questions.aspx.VB代码:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonNext.Click
' Save off previous answers
Dim dr As System.Data.DataRowView
dr = CType(questionDetails.DataItem, System.Data.DataRowView)
' Create Answer object to save values
Dim a As Answer = New Answer()
a.QuestionID = dr("QuestionOrder").ToString()
a.CorrectAnswer = dr("CorrectAnswer").ToString()
a.UserAnswer = answerDropDownList.SelectedValue.ToString()
Dim al As ArrayList
al = CType(Session("AnswerList"), ArrayList)
al.Add(a)
Session.Add("AnswerList", al)
If questionDetails.PageIndex = questionDetails.PageCount - 1 Then
' Go to evaluate answers
Response.Redirect("results.aspx")
Else
questionDetails.PageIndex += 1
End If
If questionDetails.PageIndex = questionDetails.PageCount - 1 Then
buttonNext.Text = "Finished"
End If
End Sub
如果您能够提供我需要的代码,那将会很有帮助。在此先感谢您的帮助。
添
答案 0 :(得分:2)
这应该是相当直接的。由于您已经检索到正确答案,因此无需再拨打电话。
在您的页面上,您需要创建一个您希望评分和确定按钮生效的位置。 这样的东西就足够了:
<div id="gradeWindow" runat="server" visible="false">
<asp:label id="gradeLabel" runat="server" text="" />
<asp:button id="gradeOK" runat="server" text="OK" onclick="gradeOK_Clicked" />
</div>
然后修改你的功能看起来像这样
Session.Add("AnswerList", al)
If String.Compare(a.UserAnswer, a.CorrectAnswer) = 0 then
gradeLabel.Text = "That is correct"
Else
gradeLabel.Text = "That is not correct. The correct answer is " + a.CorrectAnswer
EndIf
gradeWindow.Visible = true
End Sub
Protected Sub gradeOK_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)
If questionDetails.PageIndex = questionDetails.PageCount - 1
Then
Response.Redirect("results.aspx")
Else
questionDetails.PageIndex += 1
End If
If questionDetails.PageIndex = questionDetails.PageCount - 1
Then
buttonNext.Text = "Finished"
End If
End Sub