2017-11-01 6 views
1

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!

Antwort

0

Falls jemand sehen:

Die Lösung fand ich das Modell verändern sollte: Statt pro Antwort einen IsSelected Parameter zu haben, eine Liste selectedAnswers auf Ihre Frage Modell hinzufügen. Dann wird in der Ansicht, fügen Sie Ihre Radiobutton wie folgt aus:

@Html.RadioButtonFor(m => m[i].SelectedAnswers, Model[i].Answers[j].Id) 

Sie speichert die ID jeder ausgewählten Antwort auf diese Frage ine der SelectedAnswers Liste. Sie können dann Ihre Ergebnisse mit diesen Daten erstellen.