c# - 需要中继器调节方面的帮助

标签 c# asp.net repeater

我正在开发在线测验模块。 所以我定义了两种类型的问题。

  1. 多选单选(单选按钮)
  2. 多项选择多项选项(复选框)
  3. 其他 Naswer(文本框)

我使用了嵌套转发器。第一个转发器绑定(bind)了问题。 并且子中继器绑定(bind)可用于问题的选项。

所以我想要的是检查条件,

就像如果我的问题类型是 MS(多选单选项),我将用单选按钮绑定(bind) 4 个选项。

如果是MM(Multiple Choice Multiple Option),那么我会将Options与Checkbox绑定(bind)。

那么我如何检查aspx文件中的这样的条件和代码?

最佳答案

这是一种方法:

输出

enter image description here

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>();
    }
}

关于c# - 需要中继器调节方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526189/

相关文章:

c# - 用户委托(delegate)的 SAS token

c# - 为什么 HttpWebRequest 抛出异常而不是返回 HttpStatusCode.NotFound?

asp.net - 如何使用 asp.net 中继器呈现两列布局

C# - 需要基类上的接口(interface),但只需要派生类中的实现

c# - 如何覆盖 MongoDB Gridfs 中的文件?

c# - 如何使用动态 url 在新选项卡中打开新窗口

.net - 仅将样式应用于中继器中的第一个元素

c# - ASP.net Repeater——设置 N 最大重复次数?

c# - 使用基类在多个浏览器中运行 Selenium 测试

asp.net - 将 Elmah 与卡西尼号一起使用