Ich möchte ein einzelnes ODER mehrere Antwort Quiz mit Radiobuttonfor und checkboxFor tun, aber ich kann es nicht funktionieren. Das Problem mit allen Beispielen, die ich sehe, ist, dass das Frage-Modell auch SelectedAnswer registriert, aber in meinem Fall möchte ich, dass jede mögliche Antwort auswählbar ist, da einige Fragen mehrere Antworten haben und sich die isSelected-Eigenschaft direkt im Antwort-Modell befindet.Mehrere Antwortgruppe & Antworten asp.net MVC
Deshalb, für Fragen mit einzelnen Antworten, wenn ich versuche, mein Modell mit RadioButtonFor (m => m [Frage] .Answers [answerToDisplayId] .IsSelected) zu erstellen, ist jede Antwort in einer eigenen Gruppe und nicht deaktiviert ich überprüfe eine andere Antwort aus dieser Frage (im Grunde verhält es wie ein checkBoxFor)
Was ich zur Zeit: Die Frage Modell
public enum questionfield
{
Chaser, Beater, Seeker, Contact, Process, Other
};
public enum QuestionDifficulty
{
Basic, Advanced
};
public enum AnswerType
{
SingleAnswer, MultipleAnswer
}
public class Question
{
public int Id { get; set; }
[Required(ErrorMessage = "Question name not valid")]
public string Name { get; set; }
[Required]
public QuestionField Field { get; set; }
[Required]
public QuestionDifficulty Difficulty { get; set; }
[Required]
public bool IsVideo { get; set; }
public string VideoURL { get; set; }
[Required]
public string QuestionText { get; set; }
[Required]
public AnswerType AnswerType { get; set; }
[Required]
public List<Answer> Answers { get; set; }
[Required]
public String AnswerExplanation { get; set; }
Antwort Modell:
public class Answer
{
public int Id { get; set; }
public String Answertext { get; set; }
public Boolean IsTrue { get; set; }
public Boolean IsSelected { get; set; }
}
Aussicht:
<div>
<!-- For each Question, display a new div with the Title, the question code, the question text, the video if there is one, then the possible answers depending on the type of answers-->
@using(Html.BeginForm("QuizzResult", "Home"))
{
for(int i = 0; i < Model.Count; i++)
{
<div class="QuizzQuestion">
<div class="QuizzQuestionTitle">@Model[i].Id : @Model[i].Name</div> @Html.HiddenFor(m => Model[i].Id)
<div class="QuizzQuestiontext">@Model[i].QuestionText</div>
@if(@Model[i].IsVideo)
{
<div class="QuizzQuestionVideoContainer">
<iframe class="QuizzQuestionVideo" id="ytplayer" type="text/html"
src="@Model[i].VideoURL"
frameborder="0"></iframe>
</div>
}
<div class="RadioButtonAnswers">
@if (@Model[i].AnswerType == QRefTrain3.Models.AnswerType.SingleAnswer)
{
for (int j = 0; j < Model[i].Answers.Count; j++)
{
@Model[i].Answers[j].Answertext @Html.RadioButtonFor(m => m[i].Answers[j].IsSelected, true)
@Html.HiddenFor(m => Model[i].Answers[j].IsTrue)
}
}
</div>
</div>
}
<input type="submit" value="Validate Answers"/>
}
</div>
Der Controller:
[HttpPost]
public ActionResult QuizzResult(List<Question> answers)
{
foreach(Question a in answers)
{
var b = Request.Form[a.Id.ToString()];
}
Result result = new Result();
foreach (Question q in answers)
{
result.QuestionsAskedIds.Add(q.Id);
if (Question.IsGoodAnswer(q))
{
result.GoodAnswersIds.Add(q.Id);
}
}
if (User.Identity.IsAuthenticated)
{
result.User = Dal.Instance.GetUserByName(HttpContext.User.Identity.Name);
Dal.Instance.CreateResult(result);
}
return View("QuizResult", result);
}
Was würde die gute Möglichkeit, dies zu tun? Vielen Dank!