1

私は、Web ベースのクイズ システムに取り組んでいます。

質問のリストとクイズの質問の回答を示すラジオボタン リストを含む ASP.NET テーブルを生成するコードがあります。

//Retrieve questions and answers - build the actual quiz
        DataTable dtQuiz = qr.GetQuizQuestions(QuizID);

        if (dtQuiz != null && dtQuiz.Rows.Count >= 1)
        {
            foreach (DataRow row in dtQuiz.Rows)
            {
                TableRow tr = new TableRow();
                TableCell tcQuestionNum = new TableCell();
                TableCell tcQuestion = new TableCell();

                tcQuestionNum.VerticalAlign = VerticalAlign.Top;

                tcQuestionNum.Controls.Add(new LiteralControl(row["QuestionNum"].ToString()));
                tcQuestion.Controls.Add(new LiteralControl(row["Question"].ToString()));

                RadioButtonList rblAnswers = qr.GetAnswers(QuizID, Int32.Parse(row["QuestionNum"].ToString()));
                tcQuestion.Controls.Add(rblAnswers);

                tr.Cells.Add(tcQuestionNum);
                tr.Cells.Add(tcQuestion);

                tblQuiz.Rows.Add(tr);
                tblQuiz.DataBind();
            }
        }

このコードは問題なくコンテンツを生成します。クイズの質問が表示され、ラジオボタン リストが期待どおりにレンダリングされます。

別のボタン クリック イベントがあると、何かおかしいことがあります。ユーザーが回答を選択した後、ポストバックを実行してテーブル内の行をループし、各行の 2 番目のセルにあるラジオボタン リストから回答を取得します。私はこの道を歩み始めました:

        foreach (TableRow tr in tblQuiz.Rows)
    {
        TableCell tc = tr.Cells[1];
        RadioButtonList rbl = (RadioButtonList) tc.Controls[1];
    }

問題は、(回答を投稿するために) 2 番目のボタンをクリックしたときに、テーブルに行がないことです。これはなぜですか?どうすれば修正できますか?

4

1 に答える 1

2

現時点では 1 つのインスタンスしか思い浮かびません。それは、if (!IsPostBack){}(またはIf (Not IsPostBack) Then ...VB の場合)内にテーブルを作成するコードがあるということです。

この場合、ポストバック時にテーブルは作成されません。if (!IsPostBack){}ポストバック時にテーブルが再作成されるように、コードの OUTSIDE を配置する必要があります。

アップデート

あなたのコメントに基づいて、私は提案します:

テーブルを生成するコードを独自のサブに移動します。のようなもの(vbで)

Private Sub GenerateTable()
   '' Code here
End Sub

次に、ボタンをクリックしてテーブルを生成すると、このサブを呼び出します。

最後に、ボタンをクリックして回答を送信するときは、選択を処理する前にこのサブルーチンを再度呼び出します。

最終的に、テーブルの内容を処理する前にテーブルを作成する必要があります。

心配はいりません。テーブルを作成しても、ユーザーが行った選択が上書きされることはありません。

于 2012-12-04T20:49:35.000 に答える