I have an app that is a multiple choice survey. The questions are loaded from a database and the answer choices are also loaded from a database. I want to bind the response to the model, but I'm not sure how to achieve this. Here is my ViewModel and View:
ViewModels:
public class SurveyViewModel : SurveyViewModelBase
{
public IEnumerable<SectionViewModel> Sections { get; set; }
public DemographicQuestionsModel DemographicQuestions { get; set; }
public string Title { get; set; }
}
public class SectionViewModel
{
public string SectionTitle { get; set; }
public IEnumerable<QuestionAnswerViewModel> QAs { get; set; }
}
public class QuestionAnswerViewModel
{
public QuestionViewModel Question { get; set; }
public AnswerViewModel SelectedAnswer { get; set; }
public IEnumerable<QuestionAnswerViewModel> ChildQuestions { get; set; }
}
public class QuestionViewModel
{
public Guid Id { get; set; }
public string Text { get; set; }
public IEnumerable<AnswerViewModel> PossibleAnswers { get; set; }
public int QuestionNumber { get; set; }
}
public class AnswerViewModel
{
public Guid Id { get; set; }
public string AnswerText { get; set; }
}
View:
@using VSC.ViewModels
@model VSC.ViewModels.SurveyViewModel
@{
SectionViewModel section = Model.Sections.FirstOrDefault();
}
<div class="row">
<div class="sectionTitle">@(section.SectionTitle)</div>
</div>
<form action="/VSC/Survey">
@foreach (var qa in section.QAs)
{
if (qa.Question.QuestionNumber == 0)
{
<div class="row question">
@qa.Question.Text
</div>
}
else
{
if (qa.ChildQuestions != null)
{
<div class="row question child-question @(qa.Question.QuestionNumber==null?"parent-question":"")">
</div>
}
else
{
<div class="row question @(qa.Question.QuestionNumber==null?"parent-question":"")">
@qa.Question.QuestionNumber @qa.Question.Text
</div>
}
<div class="row answers">
@foreach (var answer in qa.Question.PossibleAnswers)
{
<div class="answer">
@{
<div class="answer">
<label>
@answer.AnswerText
@Html.RadioButtonFor(m=>qa.SelectedAnswer, answer.Id)
</label>
</div>
<div class="answer">
<label>
</label>
</div>
}
</div>
}
</div>
}
}
<input type="submit" value"Submit" />
</form>
Naturally, this produces radio buttons with all the same names, so when I click on one for a given question, the previous questions radio button unchecks and the new question is now the only one with a selection.
Any help is appreciated.