2

オンラインクイズモジュールを開発しています。だから私は2種類の質問を定義しました。

  1. 複数選択単一オプション (ラジオ ボタン)
  2. 複数選択 複数オプション(チェックボックス)
  3. その他 Naswer(テキストボックス)

ネストされたリピーターを使用しました。最初のリピーターは質問をバインドします。そして子リピーターは、質問で利用可能なオプションをバインドします。

だから私が欲しいのは、コンディションをチェックしたいということです。

私の QuestionType が MS(Multiple Choice Single Option) の場合と同様に、4 つのオプションをラジオ ボタンにバインドします。

MM(Multiple Choice Multiple Option) の場合、オプションをチェックボックスにバインドします。

では、aspxファイルでそのような状態とコードを確認するにはどうすればよいですか?

4

1 に答える 1

2

これはそれを行う方法です:

出力

ここに画像の説明を入力してください

ASPX

    <asp:Repeater runat="server" ID="repeater" DataSourceID="ods" 
        onitemdatabound="repeater_ItemDataBound">
        <ItemTemplate>
            <asp:Label Text='<%# Eval("QuestionText") %>' runat="server" />
            <br />
            <asp:Panel runat="server" ID="panel">
            </asp:Panel>
        </ItemTemplate>
    </asp:Repeater>
    <asp:ObjectDataSource ID="ods" runat="server" 
        SelectMethod="GetQuestions" 
        TypeName="WebApplication1.Questions.QuestionsContext">
    </asp:ObjectDataSource>

背後にあるコード

    protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        var q = e.Item.DataItem as Question;

        if (q == null)
            throw new InvalidOperationException();

        var panel = e.Item.FindControl("panel");

        if (q.MultipleAnswers)
        {
            var checks = new CheckBoxList { DataSource = q.Answers, DataTextField = "AnswerText", DataValueField = "ID" };
            checks.DataBind();

            panel.Controls.Add(checks);
        }
        else
        {
            var radios = new RadioButtonList { DataSource = q.Answers, DataTextField = "AnswerText", DataValueField = "ID" };
            radios.DataBind();

            panel.Controls.Add(radios);
        }
    }

データコンポーネント

これはテスト用です。データソースに置き換えてください

public class QuestionsContext
{
    public IEnumerable<Question> GetQuestions()
    {
        var q = Builder<Question>.CreateListOfSize(5).Build().ToList();
        q.ForEach(x =>
        {
            x.ID = Guid.NewGuid();
            x.Answers = Builder<Answer>.CreateListOfSize(4)
                .All().With(y => y.Question, x)
                .Build().ToList();
        });

        return q;
    }
}

モデル

public class Answer
{
    public Guid ID { get; set; }
    public Question Question { get; set; }
    public string AnswerText { get; set; }
    public bool IsCorrect { get; set; }
}
public class Question
{
    public Guid ID { get; set; }
    public string QuestionText { get; set; }
    public IEnumerable<Answer> Answers { get; set; }
    public bool MultipleAnswers { get; set; }

    public Question()
    {
        this.Answers = Enumerable.Empty<Answer>();
    }
}
于 2012-07-17T16:25:18.003 に答える