【问题标题】:Can this code be compacted (ASP Multiple choice quiz) [closed]可以压缩此代码(ASP 多项选择测验)[关闭]
【发布时间】:2017-04-06 19:17:54
【问题描述】:

我在asp中创建了一个多项选择测验,但我的代码很长,你知道有什么方法可以让它更短吗?我也有每个输入的验证器,但我不确定如何阻止提交按钮被点击,除非所有的答案都被输入。

我的测试代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/SyntherMaster.Master" AutoEventWireup="true" CodeBehind="Moments and Energy Test.aspx.cs" Inherits="ComputingProject.RevisionPages._4._Nuclear_and_Particle_Physics.Nuclear_and_Particle_Physics_Topic_List" %>



<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <asp:Label ID="QLabel1" runat="server" Text="Question 1"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList1" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
    <div>
        <asp:RequiredFieldValidator ID="Q1requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList1" ErrorMessage="Ensure question 1 is completed"></asp:RequiredFieldValidator>
    </div>

    <asp:Label ID="QLabel2" runat="server" Text="Question 2"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList2" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
    <div>
        <asp:RequiredFieldValidator ID="Q2requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList2" ErrorMessage="Ensure question 2 is completed"></asp:RequiredFieldValidator>
    </div>

    <asp:Label ID="QLabel3" runat="server" Text="Question 3"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList3" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
    <div>
        <asp:RequiredFieldValidator ID="Q3requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList3" ErrorMessage="Ensure question 3 is completed"></asp:RequiredFieldValidator>
    </div>
    <asp:Label ID="QLabel4" runat="server" Text="Question 4"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList4" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
    <div>
        <asp:RequiredFieldValidator ID="Q4requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList4" ErrorMessage="Ensure question 4 is completed"></asp:RequiredFieldValidator>
    <asp:Label ID="QLabel5" runat="server" Text="Question 5"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList5" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
        <asp:RequiredFieldValidator ID="Q5requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList5" ErrorMessage="Ensure question 5 is completed"></asp:RequiredFieldValidator>
    <asp:Label ID="QLabel6" runat="server" Text="Question 6"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList6" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
        <asp:RequiredFieldValidator ID="Q6requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList6" ErrorMessage="Ensure question 6 is completed"></asp:RequiredFieldValidator>
    <asp:Label ID="QLabel7" runat="server" Text="Question 7"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList7" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
        <asp:RequiredFieldValidator ID="Q7requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList7" ErrorMessage="Ensure question 7 is completed"></asp:RequiredFieldValidator>
    <asp:Label ID="QLabel8" runat="server" Text="Question 8"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList8" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
        <asp:RequiredFieldValidator ID="Q8requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList8" ErrorMessage="Ensure question 8 is completed"></asp:RequiredFieldValidator>
    <asp:Label ID="QLabel9" runat="server" Text="Question 9"></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList9" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
        <asp:RequiredFieldValidator ID="Q9requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList9" ErrorMessage="Ensure question 9 is completed"></asp:RequiredFieldValidator>
    <asp:Label ID="QLabel10" runat="server" Text="Question 10" ></asp:Label>
    <asp:RadioButtonList ID="RadioButtonList10" runat="server"
        RepeatDirection="Horizontal" RepeatLayout="Table">
        <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
        <asp:ListItem Text="*Answer 2*" Value="Correct" />
        <asp:ListItem Text="*Answer 3*" Value="I" />
        <asp:ListItem Text="*Answer 4*" Value="4" />
    </asp:RadioButtonList>
    <asp:RequiredFieldValidator ID="Q10requiredvalidator" runat="server" Display="Dynamic" ControlToValidate="RadioButtonList10" ErrorMessage="Ensure question 10 is completed"></asp:RequiredFieldValidator>
    <asp:Button ID="Button1" runat="server" Text="Submit Final Answers" OnClick="Submit_Click" Visible="true" />
    <script runat="server">
        protected void Submit_Click(object sender, EventArgs e)
        {
            int score = 0;
            List<RadioButtonList> list = new List<RadioButtonList>() { RadioButtonList1, RadioButtonList2, RadioButtonList3, RadioButtonList4, RadioButtonList5, RadioButtonList6, RadioButtonList7, RadioButtonList8, RadioButtonList9, RadioButtonList10 };
            foreach (var element in list)
            {
                if (element.SelectedValue == "Correct")
                {
                    score++;
                }

            }
            Response.Write("you scored: "+score);
            Button1.Visible = false;
        }
    </script>
</asp:Content>

很抱歉,我很新,我正在尽我最大的努力同时学习和编码。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您可以使用数据控件,例如 ListView、GridView。这样即使有 100 个问题,您也不必更改一行代码。

    <asp:ListView runat="server" ID="ListView1">
        <ItemTemplate>
            <%# Eval("Question") %>
            <asp:HiddenField runat="server" ID="IdHiddenField" Value='<%# Eval("Id") %>'/>
            <asp:RadioButtonList ID="AnswerRadioButtonList" runat="server"
                RepeatDirection="Horizontal" RepeatLayout="Table">
                <asp:ListItem Text="*Answer 1*" Value="Incorrect 1" />
                <asp:ListItem Text="*Answer 2*" Value="Correct" />
                <asp:ListItem Text="*Answer 3*" Value="I" />
                <asp:ListItem Text="*Answer 4*" Value="4" />
            </asp:RadioButtonList>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
                Display="Dynamic" ControlToValidate="AnswerRadioButtonList"
                ErrorMessage="Ensure question is completed" CssClass="field-validation-error" />
            <hr />
        </ItemTemplate>
    </asp:ListView>
    <asp:Button ID="Button1" runat="server" Text="Submit Final Answers"
        OnClick="Submit_Click" Visible="true" />
    

    代码隐藏

    public class Quiz
    {
        public int Id { get; set; }
        public string Question { get; set; }
        public string Answer { get; set; }
    }
    
    public partial class WebForm2 : System.Web.UI.Page
    {
        // This could come from database
        private IList<Quiz> Quizzes
        {
            get
            {
                return new List<Quiz>
                {
                    new Quiz {Id = 1, Question = "Question 1"},
                    new Quiz {Id = 2, Question = "Question 2"},
                    new Quiz {Id = 3, Question = "Question 3"},
                    new Quiz {Id = 4, Question = "Question 4"},
                    new Quiz {Id = 5, Question = "Question 5"}
                };
            }
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ListView1.DataSource = Quizzes;
                ListView1.DataBind();
            }
        }
    
        protected void Submit_Click(object sender, EventArgs e)
        {
            IList<Quiz> quizzes = new List<Quiz>();
            for (int i = 0, length = Quizzes.Count; i < length; i++)
            {
                ListViewDataItem item = ListView1.Items[i];
                var radioButtonList = item.FindControl("AnswerRadioButtonList") as RadioButtonList;
                var idHiddenField = item.FindControl("IdHiddenField") as HiddenField;
                quizzes.Add(new Quiz
                {
                    Id = Convert.ToInt32(idHiddenField.Value),
                    Answer = radioButtonList.SelectedValue
                });
            }
        }
    }
    

    【讨论】:

    • 非常感谢您的回复,如果我要这样做,我将如何更改每个问题的问题和答案,以便它们不同?
    • 我不断收到 ListView1 在当前上下文中不存在的错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多