現時点では、複数の質問があり、各質問に複数の回答選択肢があるアンケートの実用的なプロトタイプがあります。すべてが表示され、保存されます。ただし、編集ビューで質問/回答を「セクション」にグループ化したいと思います。いくつかの異なる方法を試しましたが、何も正しく機能していないようです。セクションのない作業コードは次のとおりです。
ビュー進行状況レポートの編集:
<div class="form-group">
@Html.LabelFor(model => model.ReportAnswers, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ReportAnswers)
</div>
</div>
ReportAnswers.cshtml (エディター テンプレート)
<h3>
Question
</h3>
<p>
@Html.DisplayFor(x => x.Question.QuestionText)
</p>
@Html.HiddenFor(model => model.QuestionID)
@Html.HiddenFor(model => model.ReportID)
@foreach (var answer in Model.Question.PossibleAnswers)
{
var id = string.Format("answer-{0}", answer.AnswerID);
<p>
@Html.HiddenFor(model => model.ReportAnswerID)
@Html.RadioButtonFor(m => m.AnswerID, answer.AnswerID, new { id = id })
<label for="@id">@answer.AnswerText</label>
</p>
}
EditController :
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(ProgressReport progressReport)
{
if (ModelState.IsValid)
{
db.Entry(progressReport).State = EntityState.Modified;
db.SaveChanges();
foreach (ReportAnswer answer in progressReport.ReportAnswers)
{
if (answer.QuestionID != null && answer.AnswerID != null)
{
db.Entry(answer).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("Index");
}
ViewBag.ClientID = new SelectList(db.Clients, "ClientID", "ID", progressReport.ClientID);
return View(progressReport);
}
データ構造は Sections -> Questions -> Answers です 次に、QuestionID と AnswerID を持つ ProgressReport テーブルがあります
ビュー内で Groupby を試みましたが、Editortemplate を正しく呼び出す方法がわかりません。実際、使用できましたが、結果は期待どおりではありませんでした。そのコードは次のとおりです。
@foreach (var group in Model.ReportAnswers.GroupBy(s => s.Question.SectionID))
ありがとう!
データ構造スニペット: