My viewmodel works fine on GET, but on post it is null and I cannot understand why. Any help would be greatly appreciated. The Quiz-post doesn't do much at this stage, I need to access the posted model before I can finish the method. The repository.GetAllQuestionsList() returns a list of QuizViewModel
ViewModel
public class QuizViewModel {
public int Id { get; set; }
public int QuestionId { get; set; }
public string QuestionText { get; set; }
public int QuestionNbr { get; set; }
public int CurrentQuestion { get; set; }
public int TotalNbrOfQuestions { get; set; }
public List<Answer> Answers { get; set; }
}
Controller
public ActionResult Quiz() {
var getAllQuestions = repository.GetAllQuestionsList();
var model = getAllQuestions.Where(c => c.QuestionNbr == 1);
Session["CurrentQ"] = 1;
return View(model);
}
[HttpPost]
public ActionResult Quiz(IEnumerable<Models.QuizViewModel> model) {
int question = Convert.ToInt32(Session["CurrentQ"]);
string str = Request.Params["btnSubmit"];
if (str == "Next Question") {
question++;
Session["CurrentQ"] = question;
}
if (str == "Prev Question") {
question--;
Session["CurrentQ"] = question;
}
return View(model);
}
View
@model IEnumerable<Quiz.Models.QuizViewModel>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width"/>
<title>Quiz</title>
</head>
<body>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm()) {
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.QuestionText)
</th>
<th>
@Html.DisplayNameFor(model => model.QuestionNbr)
</th>
<th>
answer
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.QuestionText)
</td>
<td>
@Html.DisplayFor(modelItem => item.QuestionNbr)
</td>
<td>
@foreach (var ML in item.Answers) {
@Html.RadioButtonFor(model => item.Answers, ML.Id)
@Html.Label(ML.AnswerText)
<br/>
}
</td>
</tr>
}
</table>
<input type="submit" id="Submit1" name="btnSubmit" value="Prev Question"/>
<input type="submit" id="Submit2" name="btnSubmit" value="Next Question"/>
}
</body>
</html>