現在、このような HTML を生成している簡単な調査システムを作成しています。もちろん、ソリューションで必要な場合は変更できます。
<form id="surveyForm">
<input type="hidden" value="1" name="surveyId" />
<div class="questionContainer">
<h4>What is 2 + 2?</h4>
<div class="optionsContainer">
<div class="optionContainer">
<input id="option_1" value="1" type="radio" name="question_1" />
<label for="option_1">3</label>
</div>
<div class="optionContainer">
<input id="option_2" value="2" type="radio" name="question_1" />
<label for="option_2">4</label>
</div>
<div class="optionContainer">
<input id="option_3" value="3" type="radio" name="question_1" />
<label for="option_3">5</label>
</div>
</div>
<div class="freeTextContainer">
<h4>Comments:</h4>
<textarea id="freetext_1" name="freetext_1"></textarea>
</div>
</div>
<!-- Multiple questionContainer may follow -->
</form>
ご覧のとおり、いくつかの POST 変数、つまりquestion_1
など、question_2
などがfreetext_1
ありfreetext_2
ます。ラジオ ボタンの値は、バックエンド データベースで見つかったオプション ID に対応します。
ここで、jQuery などを使用して、Ajax を使用して応答を MVC API コントローラーに投稿したいと考えています。
質問 1 です。jQuery を使用してこれらの値をサーバー側でデコードできる JSON 文字列にシリアル化する方法と、この json 文字列を受け入れる MVC メソッド サーバー側を指定する方法を教えてください。
質問 2: 上記の解決策はあまり洗練されていないため、MVC API メソッドで入力パラメーターとして使用できる POCO オブジェクト構造に変換できる方法でシリアル化したいと考えています。
public class SurveyAnswer
{
public int SurveyId { get; set; } // From a hidden field
public List<QuestionAnswer> Answers{ get; set; }
}
public class QuestionAnswer
{
public int QuestionId { get; set;}
public int OptionSelecion { get; set; }
public string FreeText { get; set; }
}
そして、次のような MVC メソッド:
[HttpPost]
public ActionResult PostAnswer(SurveyAnswer answer)
{
...
}
上記を実現するためにフォームをシリアル化するにはどうすればよいですか?