2012-01-11 67 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