1

asp.netページに表示する3つの質問をランダムにします。秘密の質問をデータベースの正解と照合したい。しかし、テキストボックスに正解を入力して[次へ]ボタンをクリックすると、画面に表示されている現在の質問と答えが一致しなくなります。ただし、[次へ]ボタンをクリックすると、表示される次の質問は、前の質問のテキストボックスに入力した回答と一致します。これは、ページを更新した後の質問と回答が一致しているためだと思います。助けてください。これが私のコードです。ありがとう

vb.netコード

Dim SecurityQuestion As New DBDataContext
Dim randomNumber As Integer

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim SecurityQuestion As New DBDataContext
    Dim rowCount As Integer = (From t In SecurityQuestion.tblSecurityQuestions Select t).Count + 1
End Sub

Protected Sub btnNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNext.Click
    ValidateAnswer()
End Sub

Private Sub LoadSecurityQuestion()
    Dim SecurityQuestion As New DBDataContext
    Dim mySecurityQuestion = (From c In SecurityQuestion.tblSecurityQuestions Where c.PkID = randomNumber Select c)
    Dim rowCount As Integer = (From t In SecurityQuestion.tblSecurityQuestions Select t).Count + 1
    randomNumber = New Random().Next(1, rowCount)
    With gvQuestion
        .DataSource = mySecurityQuestion
        .DataBind()
    End With
End Sub

Private Sub ValidateAnswer()
    Dim SecurityQuestion As New DBDataContext
    Dim validate = (From r In SecurityQuestion.tblRegistrations From s In SecurityQuestion.tblSecurityQuestions _
        Where s.PkID = r.Q01 And r.A01 = txtSecurityAns.Text And r.UserID = ad And s.PkID = randomNumber _
        Select r)

    If validate.Count > 0 Then
        Msg3.Text = "Correct Answer"
    Else
        Msg3.Text = "Invalid Answer"
    End If
End Sub
4

1 に答える 1

0

この回答を投稿した時点では、コードの一部が欠落している可能性があります。例として、実際にメソッドLoadSecurityQuestionを呼び出している場所がわかりませんでしたが検証が成功した後でも、メソッドLoadSecurityQuestionを酸っぱく再呼び出ししている可能性があります。

LoadSecurityQuestionへの呼び出しを「if」修飾子でラップすることでこの問題を修正できると思います。例として、LoadEventハンドラーでLoadSecurityQuestionを呼び出していたとしますこれを行った場合、新しいLoadイベントハンドラーは次のようになります。

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    ...
    If IsPostBack Then
        ' If you wrap all of your Me.LoadSecurityQuestion calls 
        ' with "If" statements like this one, then it should keep
        ' the security question from changing when the user 
        ' enters the correct answer
        If Msg3.Text <> "Correct Answer" Then                
            Me.LoadSecurityQuestion()
        End If
    End If
    ...
End Sub
于 2012-09-02T03:41:06.647 に答える