0

質問のリストがあり、ajax呼び出しを介してユーザーの回答を保存したいと思います。たとえば、50の質問があり、50の質問すべてをループして、各回答をコントローラーに送信する(保存する)必要があるのか​​、結果を大きなデータとしてコントローラーに送信する必要があるのか​​わかりません。

私の見解:

@using COPSGMIS;
@model IEnumerable<COPSGMIS.Models.Quiz>

@{
    ViewBag.Title = "Questionaire";
}
<h2>Questionaire</h2>
  <input type="hidden" id="currentstep" name="currentstep" />
   @using (Html.BeginForm("Questionaire", "Question", FormMethod.Post, new { id = "SignupForm" }))
   {
       <div id="wizardtemplate">       
            @foreach (var step in Model)       
            {
              <fieldset class="wizard">
                <div class="page_Title"> @Html.DisplayFor(modelItem => step.Title)</div>               
                @foreach (var question in step.Results)
                {
                ... code removed ....
                <label for="question">@Html.DisplayFor(modelItem => question.NumberedQuestion)</label>  
                 @Html.Raw(Html.DisplayControl(question.QuestionID, question.Choices, question.AnswerValue,question.ControlType)) 
                 </div>                               
                 @Html.Partial("_Comment", question)
               <hr />
                }
              </fieldset>
            }       

レンダリングされたHTML:

<label for="question">3. This is a sample question (2) for the questionare?</label>  
                 <div class='answer'><input type='date' id='3' name='3' value='2012-12-10' /></div> 
                 </div>                               
 ... code removed ....

 <label for="question">4. This is a sample question (3) for the questionare?</label>  
                 <div class='answer'><input type='text' id='4' name='4' value='999' /></div> 
                 </div>         

モデル:

 public class Quiz
    {
        public int ReviewID { get; set; }
        public int StepID { get; set; }
        public string Title { get; set; }
        public virtual IEnumerable<Result> Results { get; set; }
    }

ajax呼び出し:

function SaveAnswer(//not sure what needs to be passed) {

    $.ajax({
        url: '/Question/SaveQuestionaire',
        type: 'POST',
        cache: false,
        dataType: 'json',
        data: ({
            // not sure what this will look like?
        }),
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        },
        success: function (json) {
            // Message to confirm save
        }
    });
}
4

1 に答える 1

0

使いやすさのために、すべての質問に対してAJAXリクエストを送信するのは簡単です。ただし、エントリの配列をサーバーにプッシュして、オブジェクトの配列として解釈できる必要があります。

次のように配列を作成できます。

var array = [];

for (var i = 0; ...)
   array.push(items[i]);

次に、アレイをサーバーにプッシュします。

大きなフォームを作成しているので、次のことも試してみてください。

 $.ajax({
        url: '/Question/SaveQuestionaire',
        type: 'POST',
        cache: false,
        dataType: 'json',
        data: $("#SignupForm").serialize(), // creates an object for you

ただし、これを機能させるには、生成されるIDに注意する必要があります。これは、オブジェクト配列を再作成するために使用されるためです。あなたが取ったアプローチがそれに対応しているかどうかはわかりません。

于 2013-01-03T17:42:53.360 に答える