我在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>
很抱歉这个状态,但我很新,我正在努力学习和编写代码。
答案 0 :(得分:2)
您可以使用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
});
}
}
}