2012-01-11 100 views
2

我是一个为我们公司工作的新手程序员。我正在开发一个Quiz引擎进行培训。我有一些约90%的示例代码。我只需要调整一些东西。这是我正在做的。在asp.net中打开新窗口VB

这是用VB.net建立的ASP.net。我有一系列问题需要从数据库中提取(使用内置的SQLDataSource绑定),目前它所做的是提出问题,选择答案,然后单击下一步。列表等等......直到结束,数据库包含一个列,指出正确的答案是什么,当你点击下一步时,它将你的答案与正确的答案比较,存储它,然后继续下一个问题。最后,它会吐出你正确的答案和不正确的答案

然而,这就是我想要做的。当用户选择一个答案并点击下一个,它立即打开一个小的新窗口(不是弹出窗口)但在同一页面上的一个窗口),立即“分级”的问题,并在该窗口中,显示它是否正确..这样的事情:

If selected answer = correctAnswer then 
"That is correct" 
Else 
"THat is not correct. The correct answer is B" 
End if 

新窗口将只包含底部角落的“确定”按钮。按下“确定”后,它会关闭新窗口并处理“下一步”按钮编程的其余部分。下面是按钮:

<asp:Button ID="buttonNext" runat="server" Text="Next" />&nbsp;</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 

如果你能提供我需要的代码,这将是有帮助的。先谢谢您的帮助。

Tim

+1

你需要重新考虑你的过程中一点点,主要有两个原因 1.这将使测验远容易 2.用户将不得不回答这个问题,点击下一步,看看他们是否正确,然后再次点击下一步或其他按钮,以获得下一个问题 如果你真的想这样做,那么我建议你看看在使用自定义的验证器时,但如果你没有人会永远'失败'测试。 – Stuart 2012-01-11 00:50:49

回答

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 
+0

这就是我要找的。除此之外,你如何在弹出的小窗口中显示“这是正确的”或“这是不正确的”?如果可能的话,我希望这样做。 – Tim 2012-01-11 23:31:46

+0

对不起,我以为你在你的第一篇文章中说过你不想要一个弹出窗口。这就是为什么我使用了一个div? – 2012-01-11 23:36:06

+0

对不起,我的坏。其实,我已经改变了一点。我已经包含一个window.open语句在新窗口中打开这个测验。然而,在这个新窗口中,我仍然喜欢一个“弹出”类型的窗口,但作为当前页面的一部分(不是它自己的窗口)。当这个窗口打开时,它将显示正确或不正确,并带有“OK”按钮,点击后,将关闭那个小的弹出窗口并转到下一个问题。 – Tim 2012-01-15 05:48:01