2016-11-17 9 views
0

私の仕事のためのオンライン試験ツールを開発しようとしています。私は、質問のリスト、回答のリストを含む質問のクラス、回答のクラスを含む試験を定義するクラスを持っています。私は質問のリストを引き出し、それをビューに渡すビューモデルと、各質問の答えの価値を保持するintの配列を持っています。ビューでは、私は質問をループし、それぞれの質問ではそれぞれの可能な答えをループします。複数の選択肢については、これは簡単です。私はちょうど使用:これは素晴らしい作品asp.netコアのチェックボックスとラジオボタンの問題

<input asp-for="SelectedAnswer[q]" type="radio" value="@a" />@Model.Questions[q].answers[a].AnswerText 

、それが戻って提出上のコントローラをSelectedAnswerのint配列を渡し、私はそれでやりたいことができます。私の問題は、質問が複数の正しい答えのチェックボックスリストを必要とする場合に下になります。私は明らかに答えをポストするために同じint配列を使うことができないので、質問の各チェックボックスの2番目のbool配列を作成し、それを返すことを考えました。しかし、これは本当に1つの質問のたびに新しい質問ごとにポストバックのbool配列をオーバーライドします。

私が理解しようとしているのは、1つのページに表示できるさまざまな種類の質問がある場所でこれを行う方法です。送信ボタンを押して処理するときにコントローラに返送されます。

多分、私はより良いビューモデルが必要ですか?私はこれで次にどこへ行くべきかわからない。 私は必要なコードを提供することができます、私はちょうどコードでページ全体を埋めるしたくありませんでした。

マイビュー:

@model DSCA_Exams.Models.ExamViewModels.ExamViewModel 
<form asp-action="Exam_Results"> 
    <div> 
     @for (int q = 0; q < Model.Questions.Count(); q++) 
     { 
      <div> 
       <hr /> 
       <h4>@Model.Questions[q].QuestionText</h4> 
       <ul> 
        @for (int a = 0; a < Model.Questions[q].answers.Count(); a++) 
        { 
         <li> 
          @if (Model.Questions[q].QuestionType == 0) 
          { 
           <input asp-for="SelectedAnswer[q]" type="radio" value="@a" />@Model.Questions[q].answers[a].AnswerText 
          } 
          else 
          { 
           <input asp-for="@Model.isSelected[a]" />@Model.Questions[q].answers[a].AnswerText 
          } 
         </li> 
        } 
       </ul> 
      </div> 
     } 
     <hr /> 
     <input type="submit" value="Grade Test" class="btn btn-default" /> 
    </div> 
</form> 

答えて

0

は、ビューモデルを使用してオブジェクトグラフを保存します。たとえば、次のように

public class QuestionViewModel 
{ 
    public string QuestionText { get; set; } 
    public List<AnswerViewModel> Answers { get; set; } 
    public List<int> SelectedAnswers { get; set; } 
    ... 
} 

次に、あなたのビューで:あなたが投稿するとき

@for (var i = 0; i < Model.Questions.Count; i++) 
{ 
    <p>@Model.Questions[i].QuestionText</p> 

    @for (var j = 0; j < Model.Questions[i].Answers.Count; j++) 
    { 
     <label> 
      <input asp-for="Questions[i].SelectedAnswers" type="radio" value="@Model.Questions[i].Answers[j].Id" /> 
      @Model.Questions[i].Answers[j].AnswerText 
     </label> 
    } 
} 

はその後、modelbinderは、オブジェクトグラフを保存することができます、あなたは、各質問のSelectAnswers性質を調べることができます。

+0

質問に自分の現在のビューを追加しました。私はあなたが多かれ少なかれ提案したことをやっています。私はラジオボタンに問題はありませんが、chckboxlistを使うと1つ以上の質問が増えます。質問ごとにn個の回答を保持するために多次元配列を行うことはできないので、複数のチェックボックスリストをコントローラに戻す方法はわかりません。 –

+0

それは私が言っていることです。すべての質問に対するすべての回答を1つの配列にまとめようとするのではなく、代わりに、それぞれの質問には選択された回答の配列があります。複数選択の場合、1つの項目だけが存在しますが、チェックボックスリストの場合は複数の項目があります。多次元配列は必要ありません。 –

+0

ああ、私はあなたがそれを行うことができたことを知りませんでした。それは私がasp.netと闘うところです。私はC#を数日間コーディングすることができますが、asp.netを使ったこのオートマチックなものはすべて私にとっては難しいものです。病気はそれを与える。 –

関連する問題