【问题标题】:Need help for conditioning in Repeater需要帮助在中继器中进行调节
【发布时间】:2012-07-17 15:47:49
【问题描述】:

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

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

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

所以我想要检查条件,

如果我的 QuestionType 是 MS(Multiple Choice Single Option),我会将 4 个选项与单选按钮绑定。

如果它的 MM(Multiple Choice Multiple Option) 那么我会将 Options 与 Checkbox 绑定。

那么我怎样才能在 aspx 文件中检查这样的条件和代码呢?

【问题讨论】:

    标签: c# asp.net repeater


    【解决方案1】:

    这是一种方法:

    输出

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

    【讨论】:

    • 非常感谢..它起作用了。但是现在我如何才能检查用户在服务器端检查了哪个单选按钮或哪个复选框?
    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多