2017-03-22 4 views
2

arbeiten am Erstellen einer Web-basierten Revisionsressource und ich versuche, ein Multiple-Choice-Quiz in C# mit asp.net zu erstellen. Ich habe es erstellt und habe es funktioniert, aber es ist sehr lang und fragte mich, ob jemand eine Idee davon hatte, wie ich den Code kompakter machen könnte, auch wenn es das Endergebnis druckt es erscheint über meiner Navigationsleiste auf meiner Website von ich habe keine Idee warum.C# Multiple-Choice-Test

zusätzlich können die Antworten geändert werden und die Schaltfläche zum Absenden nur angeklickt, ich kann nicht für die Liebe von irgendetwas nichts finden, wie man dies stoppt.

Ich bin extrem neu und versuche mein Bestes. wenn mir jemand in die richtige Richtung zeigen könnte oder etwas vorschlagen könnte, wäre das toll.

Dank

ich für die Länge des Codes appologise:

<asp:Content ID="Content1" ContentPlaceHolderID="Head" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="Body" runat="server"> 
    <asp:Label ID="Label1" runat="server" Text=""></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> 
    <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> 
    <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> 
    <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> 
    <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: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: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: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: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: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:Button ID="Button1" runat="server" Text="Submit Final Answers" OnClick="Submit_Click" /> 
    <script runat="server"> 
     protected void Submit_Click(object sender, EventArgs e) 
     { 
      int Score = 0; 
      string selectedValue1 = RadioButtonList1.SelectedValue; 
      if (selectedValue1 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue2 = RadioButtonList2.SelectedValue; 
      if (selectedValue2 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue3 = RadioButtonList3.SelectedValue; 
      if (selectedValue3 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue4 = RadioButtonList4.SelectedValue; 
      if (selectedValue4 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue5 = RadioButtonList5.SelectedValue; 
      if (selectedValue5 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue6 = RadioButtonList6.SelectedValue; 
      if (selectedValue6 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue7 = RadioButtonList7.SelectedValue; 
      if (selectedValue7 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue8 = RadioButtonList8.SelectedValue; 
      if (selectedValue8 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue9 = RadioButtonList9.SelectedValue; 
      if (selectedValue9 == "Correct") 
      { 
       Score++; 
      } 
      string selectedValue10 = RadioButtonList10.SelectedValue; 
      if (selectedValue10 == "Correct") 
      { 
       Score++; 
      } 
      Response.Write(Score); 

     } 
    </script> 
</asp:Content> 
+1

Stattdessen können Sie versuchen, die Repeater-Kontrolle oder eine andere Bindungskontrolle zu verwenden, die sich entsprechend der Anzahl der Datensätze wiederholt, die Sie darin binden. –

+0

Sie sollten sich mit der Verwendung von Methoden vertraut machen. Sie müssen Logik nicht wie Ihre Bewertung mehrere Male schreiben. –

+1

Ich stimme @KevinShah über die Verwendung einer Repeater-Steuerelement und Datenbindung. Es wäre prägnanter. Außerdem besteht das Problem, wie Sie dies jetzt haben, darin, dass Sie den Code ändern müssen, wenn Sie das Quiz ändern möchten. Wenn Sie Datenbindung und Repeater verwenden, können Sie stattdessen einfach die Daten ändern. – EJoshuaS

Antwort

1

Dies kann die Evaluierungsphase verkürzen bis:

RadioButtonList[] lists = new RadioButtonList[] {RadioButtonList1, RadioButtonList2, RadioButtonList3, RadioButtonList4, RadioButtonList5, RadioButtonList6, RadioButtonList7, RadioButtonList8, RadioButtonList9, RadioButtonList10 }; 

foreach (RadioButtonList element in lists) { 
      if (element.SelectedValue == "correct") { 
       Score++; 
     } 
} 
1

Für die Submit_Click Methode, würde ich empfehlen Ihnen, haben Sie alle Ihre CheckBoxen in einer Liste oder aufzählbar. Dann könnten Sie auf dieser Liste iterieren und das Ergebnis in jeder Iteration auswerten. Etwas in den Zeilen:

protected void Submit_Click(object sender, EventArgs e) 
{ 
    int score = 0; 
    List<RadioButtonList> list = new List<RadioButtonList>() { RadioButtonList1, RadioButtonList2, ... RadioButtonList3 }; 
    foreach (var element in list) 
    { 
     if (element.SelectedValue == "correct") { 
      score++; 
    } 
    Response.Write(score); 
} 
+0

Das ist wirklich gut danke, aber ich bekomme nur eine Ausgabe Punktzahl von 0, egal die Eingabe, wenn Sie den Skript-Code zu diesem ändern. Danke für die schnelle Antwort –

+0

@DanielTurville, ich habe gerade festgestellt, dass ich "korrekt" anstelle von "Korrekt" eingegeben habe. Ändern Sie es in "Korrekt" und Sie sind wahrscheinlich gut zu gehen. Zusätzlich können Sie es mit der Methode string.Equals vergleichen. Ex. 'string.Equals (" richtig ", Element.SelectedValue, StringComparison.OrdinalIgnoreCase). Das würde den Fall ignorieren, wenn man die Werte vergleicht. –

0

Ich habe keine genaue Lösung, aber da Sie gebeten, die richtige Richtung ist, hier sind die Schritte, die Sie sollten nehmen:

  • ein User Control erstellen mit einem TextBox für Frageanweisung und eine Radiosteuerungsliste oder irgendetwas für die Wahlen, auch fügen Sie ein verstecktes Feld hinzu, um einen Bezeichner oder etwas zu setzen, das die Frage richtig identifiziert.
  • Auf der Hauptwebseite verwenden Sie entweder ein Repeater-Steuerelement oder fügen das Benutzersteuerelement dynamisch mit den Daten hinzu.
  • Der gesamte Code für die Überprüfung der richtigen Choice-Auswahl sollte in der Benutzerkontrolle sein.
  • Im Hauptformular, wenn es eingereicht wird, auf jedes Benutzersteuerelement zugreifen und das Ergebnis sammeln.

habe ich eine ähnliche app in ASP.NET webForms vor Jahren, aber ich hatte „< < Zurück“ und „Weiter >>“ Tasten so auf der einen Seite nur noch eine Frage wurde angezeigt und die ganze app Zeit so aufgezeichnet werden, wenn Nach Ablauf der Testdauer hat der Benutzer die Endseite aufgerufen.

+0

Ich denke, das ist ein wenig voraus von dem, was ich weiß, würden Sie in der Lage sein, mich zu verknüpfen, wo ich lernen oder ein Beispiel sehen kann, was Sie meinen. Danke –

+0

Sicher, gibt es eine Möglichkeit, dass wir diese Diskussion aus Stackoverflow nehmen können? –

+0

sicherer Mann, was auch immer du magst? –