Quiz przechodzenie do następnego pytania asp.net

0

Witam,
piszę quiz i mam coś takiego

 <table>
    <tr>
        <th>Id</th>
        <th>Pytanie</th>
        <th>Odpowiedź</th>
    </tr>
    @foreach (var q in Model)
    {
        <tr>
            <td>@q.QuestionId</td>
            <td>@q.Text</td>
          
    
        @foreach (var answer in @q.Answers)
        {
            <td>
                <input type="radio" name="@q.QuestionId" value="true"> @answer.Text
                <br />
            </td>
        }
            </tr>
    }
            <tr>
                <button type="button" id="next-question" class="btn btn-default btn-block">Następne pytanie</button>
            </tr>
</table>

user image

Próbuję wypisać tylko jedno pytanie i jego odpowiedzi zmieniając u góry z @model IEnumerable<WebQuiz.Models.Question> na samo @model WebQuiz.Models.Question i potem u dołu w kodzie wywalam foreach pierwszy i daję zamiast q.*** Model.QuestionId itd. to mi gdy przejdzie kompilację program wywala "nieznany błąd" na stronie i tona jakiś żółtych błędów. Ktoś wie jak poprawnie wyświetlić tylko jedną pozycję?

0

A kontroler co zwraca? Też powinien zwracać WebQuiz.Models.Question

0

aktualnie mam napisane że zwraca listę pytań, ale właśnie tak się zastanawiam i to nie może być lista tylko chyba pytanie o id = 1. Tak ?

Chodzi mi o to, że jak teraz mam listę wszystkich pytań wyświetlaną, a chcę zrobić coś ala quiz, że będzie po kliknięciu przycisku następne pytanie szło do kolejnego, małymi kroczkami do przodu.

0
 public ActionResult ShowTest()
        {            
                return View(db.Questions.ToList());
        }

tak dokładnie się to prezentuje ;)

0

Kwestia jak wyciągnąć w widoku z tej listy Question dokładnie to pytanie o ID równym 1. Tylko kurczele siedzę nad tym od 3 godzin i aż głowa boli...

1

To źle. Powinno być jakoś tak:

public ActionResult ShowTest()
        {            
                return View(db.Questions.First());
        }
public ActionResult ShowTestPost()
        {            
               var model = new Question();
               TryUpdateModel(model));
               //zapis do odpwiedzi do bazy
                return View(db.Questions.First(q=> q.Id == model.Id+1));
        }

Ale to nie jest pięknie, nie ma obsługi błędów, powinieneś sprawdzić czy następne pytanie w ogóle istnieje itp.

0

A zamiast zapisu do bazy jakby to w sesji trzymać? Bo nawet nie chcę tego trzymać w bazie. Da się zrobić tak ??

0

user image
jak widać wyświetla pięknie tylko pierwsze pytanie i odpowiedzi do tego pytania.

@model WebQuiz.Models.Question
@{
    ViewBag.Title = "ShowTest";
}

<table>
    <tr>
        <th>Id</th>
        <th>Pytanie</th>
        <th>Odpowiedź</th>
    </tr>

    <tr>
        <td>@Model.QuestionId</td>
        <td>@Model.Text</td>
                @foreach (var answer in @Model.Answers)
        {
            <td>
                <input type="radio" name="@Model.QuestionId" value="true"> @answer.Text
                <br />
            </td>
        }
    </tr>

    <tr>
        <input type="submit" value="Next Question" />
    </tr>
</table>

@section Scripts{
    <script type="text/javascript">
        var current_question = 1;


        // Funkcja przełączająca pytanie na następne
        $('#question').submit(function(){
            current_question++;
            $('#question').html(questions[current_question]);
            return false;
        });
    </script>
}
 

Kolej na skrypt przycisku, strugałem takie coś ^ ale niestety coś nie tak, jakiś pomysł ? Trzeba by wykorzystać jakoś StartTestPost() tak jak mi kolego napisałeś.

0

Nie potrzebujesz skryptu, wyślij to w formie.

@using(Html.BeginForm("ShowTestPost"))
{
     <table>
    <tr>
        <th>Id</th>
        <th>Pytanie</th>
        <th>Odpowiedź</th>
    </tr>
 
    <tr>
        <td>@Model.QuestionId</td>
        <td>@Model.Text</td>
                @foreach (var answer in @Model.Answers)
        {
            <td>
                <input type="radio" name="@Model.QuestionId" value="true"> @answer.Text
                <br />
            </td>
        }
    </tr>
 
    <tr>
        <input type="submit" value="Next Question" />
    </tr>
</table>
}
0

Tylko jak daję w form to się nic nie zmienia po za adresem strony z ShowTest na ShowTest?Length=12

1 użytkowników online, w tym zalogowanych: 0, gości: 1