Asp.net MVC Einfache Quiz Anwendung



  • Hi,

    ich versuche gerade eine einfache Asp.net MVC Quiz App zu entwickeln.
    Es wird eine Frage auf der Seite angezeigt mit vier Antwortbutton.
    Wenn der User einen Button drueckt wird die Antwort zum Server geschickt und geprueft ob es die richtige Antwort war.

    Hier mein Razor code:

    @using (Html.BeginForm("CheckAnswer", "Movies", new {qid = item.ID }, FormMethod.Post)){
                     <button type="submit"  name="answer" value="1">@Html.DisplayFor(modelItem => item.Answer1)</button>
                     <button type="submit"  name="answer" value="2">@Html.DisplayFor(modelItem => item.Answer2)</button>
                     <button type="submit"  name="answer" value="3">@Html.DisplayFor(modelItem => item.Answer3)</button>
                     <button type="submit"  name="answer" value="4">@Html.DisplayFor(modelItem => item.Answer4)</button>
                }
    

    Hier mein Controller Code zum checken der Antwort:

    public string CheckAnswer(int qid, string answer)
    {
         Console.WriteLine("Execute the CheckAnswer method\n");
         var correctAnswer = from d in db.Movies
                             where d.ID == qid
                             select d.CorrectAnswer;
    
         if (correctAnswer.First() == answer)
         {
                       return "Correct";
         }
    
        return "Wrong";
    }
    

    Bis jetzt klappt auch alles.

    Ich moechte nun das wenn die Antwort falsch ist dem User die richtige Antwort zeigen in dem der falsche Antwortbutton rot gefaerbt wird und der richtige gruen. (Bis jetzt wird nur “Wrong“ als String zurueckgegeben)

    Wie kann man dies am besten machen? Nach welchem Design Prinzip muss man solche Iteraktionen entwickeln?

    Vielen Dank,
    🙂



  • Hallo

    Du hast hier mehrere Möglichkeiten.

    Eine wäre zum Beispiel, unter Voraussetzung das es ein Seiten-Reload gibt, dass du beim Anzeigen der Antworten (Eigenschaften Answer[1-4]) zum Text zusätzlich noch eine Information für die Darstellung, z.B. eine CSS-Klasse die den Button entsprechend einfärbt, mit zurück gibst.

    Und bei CheckAnswer, eben nicht nur eine Zeichenkette lieferst, sondern den gleichen Result wie bei der Startseite, nur hier eben mit ausgefüllten Zusatzinformationen.

    Gruß Marc-o



  • Marc-O schrieb:

    Hallo

    Du hast hier mehrere Möglichkeiten.

    Eine wäre zum Beispiel, unter Voraussetzung das es ein Seiten-Reload gibt, dass du beim Anzeigen der Antworten (Eigenschaften Answer[1-4]) zum Text zusätzlich noch eine Information für die Darstellung, z.B. eine CSS-Klasse die den Button entsprechend einfärbt, mit zurück gibst.

    Und bei CheckAnswer, eben nicht nur eine Zeichenkette lieferst, sondern den gleichen Result wie bei der Startseite, nur hier eben mit ausgefüllten Zusatzinformationen.

    Gruß Marc-o

    Danke fuer die Antwort!

    Aber wenn ich Informationen zur Darstellung mit zurueckgebe dann sind diese Informationen (z.b Farbinformationen) ja in meiner Controller Klasse vorhanden.
    Vermische ich dann nicht View und Controller (was ja vermieden werden soll)?



  • Hallo

    Nein ist es nicht, du gibst ja nur mit zurück, welche Antwort die falsche ist, und welche dir richtige ist und nicht mehr. Diese Information, wenn man sie gut verpackt, kann man sie direkt als z.B. CSS-Klasse verwenden, damit machst du es dir nur einfacher.

    Könntest ja auch einfach eine Enum oder 2 Bits zurückliefern, die dir diese Information mitteilen, und in der View nochmal eine Auswertung bauen um die Darstellung durchzuführen.

    Bei der Lösung mit der CSS-Klasse, ist die Information über die Darstellung ja im CSS hinterlegt und nicht im Controller. Und CSS gehört meiner Meinung nach zur View.

    Gruß Marc-o


Log in to reply