質問/回答がデータベース駆動型である複数ページの評価フォームに取り組んでいます。現在、標準の ASP.Net MVC を介して Html.BeginForm を操作する基本的なシステムです。
この時点で、システム全体の鍵は「厳密に型指定された部分ビュー」です。質問/回答がデータベースから読み取られると、回答の種類によって、どの派生モデルが作成され、コレクションに追加されるかが決まります。メイン ビューはコレクションを反復処理し、ASP.Net MVC の 'Strongly Typed Partial Views' システムを使用して、正しいタイプの応答 (ラジオ ボタン、ドロップダウン、またはテキスト ボックス) をレンダリングするビューを決定します。
このプロセスを Html.BeginForm から Ajax.BeginForm に変更したいと思います。問題は、JavaScript/jQuery の世界で質問/応答の動的な作成を実装する方法についての手がかりがないことです。考えや提案はありますか?
追加情報:
変更の理由は、発生する必要がある複雑なリアルタイム スキップ パターン (検証) です。一部の質問は、スキップ パターンをトリガーします。スキップパターンは、他の質問のアクセシビリティと値を決定します。ユーザーがスキップ パターンをトリガーする質問を変更すると、現在のすべての回答をサーバーに送り返して、ルール エンジンで実行する必要があります。
1 つの問題は、ASP.Net MVC 入力が読み取り専用に設定されている場合、その値がポストバックされないことです。解決策は、現在の値を持つ非表示の入力です。この非表示の値は、値がユーザーまたはルール エンジンによって変更された場合の両方で、JavaScript によって管理される必要があります。
全体として、管理は非常に複雑に思えます。ASP.Net MVC コードが単純に JSON モデルを提供し、jQuery が単純にブラウザーでフォームを作成してから、保存アクションまたはスキップ パターン検証アクションを呼び出して、JSON モデルを渡すという方が論理的に思えます。頭痛の層を1層取り除くようです:)
動的フォームを生成する現在のコードは次のとおりです。
@using (Html.BeginForm(new { mdsId = @Model.MdsId, sectionId = @Model.SectionId }))
{
<div class="SectionTitle">
<span>Section @Model.SectionName - @Model.SectionDescription</span>
<span style="float: right">@Html.CheckBoxFor(x => x.ShowUnansweredQuestions) Show only unaswered questions</span>
</div>
@Html.HiddenFor(x => x.PrevSectionId)
@Html.HiddenFor(x => x.NextSectionId)
for (var i = 0; i < Model.answers.Count(); i++)
{
@Html.EditorFor(m => m.answers[i]);
}
}