私はこのモデルを持っています:
public class QuestionDTO
{
public Question Question { get; set; }
public OpenQuestionAnwser OpenQuestionAnwser { get; set; }
public List<ChoiceQuestionAnwser> ChoiceQuestionAnwsers { get; set; }
public void AddChoiceQuestionAnwser()
{
ChoiceQuestionAnwsers.Add(new ChoiceQuestionAnwser() {ChoiceQuestionAnwserID = ChoiceQuestionAnwsers.Count});
}
public void RemoveChoiceQuestionAnwser(int index)
{
ChoiceQuestionAnwsers.RemoveAt(index);
}
public void Save()
{
}
}
そして、コレクションにオブジェクトを動的に追加するajaxフォームを作成したいのですが、フォームをサーバーに送信すると空のコレクションが取得されるため、問題が発生します。私はいくつかの異なる方法を試しましたが、運がありませんでした。
フォームコード:
@using (Ajax.BeginForm("AddChoiceQuestionAnwser","Question",new AjaxOptions
{
UpdateTargetId = "chooseAnwsersTableBody"
}))
{
<table class="hovered" id="anwsers">
<tr>
<th>Poprawna</th>
<th>Treść odpowiedzi</th>
<th></th>
</tr>
<tbody id="chooseAnwsersTableBody">
@Html.Partial("ChooseAnwsersView",Model)
</tbody>
</table>
@Html.HiddenFor(a => a.ChoiceQuestionAnwsers);
@Html.HiddenFor(a => a.OpenQuestionAnwser)
@Html.HiddenFor(a => a.Question)
<div>
<input type="submit" value="Dodaj odpowiedź"/>
</div>
}
およびコントローラーコード:
[HttpPost]
public ActionResult AddChoiceQuestionAnwser(QuestionDTO questionDto)
{
questionDto.AddChoiceQuestionAnwser();
return PartialView("ChooseAnwsersView", questionDto);
}
および部分ビュー
@model BusinessLogic.DTO.Test.QuestionDTO
@{
ViewBag.Title = "ChooseAnwsersView";
}
@foreach(var item in Model.ChoiceQuestionAnwsers)
{
<tr>
<td> @Html.CheckBox("ChoiceQuestionAnwsers["+item.ChoiceQuestionAnwserID+"].IsCorrect",item.IsCorrect,new {@id="ChoiceQuestionAnwsers_"+item.ChoiceQuestionAnwserID+"__IsCorrect"})
@Html.Hidden("ChoiceQuestionAnwsers[" + item.ChoiceQuestionAnwserID + "].ChoiceAnwserType", item.ChoiceAnwserType, new { @id = "ChoiceQuestionAnwsers_" + item.ChoiceQuestionAnwserID + "__ChoiceAnwserType" })
@Html.Hidden("ChoiceQuestionAnwsers[" + item.ChoiceQuestionAnwserID + "].ChoiceQuestionAnwserID", item.ChoiceQuestionAnwserID, new { @id = "ChoiceQuestionAnwsers_" + item.ChoiceQuestionAnwserID + "__ChoiceQuestionAnwserID" })
@Html.Hidden("ChoiceQuestionAnwsers[" + item.ChoiceQuestionAnwserID + "].Data", item.Data, new { @id = "ChoiceQuestionAnwsers_" + item.ChoiceQuestionAnwserID + "__Data" })
@Html.Hidden("ChoiceQuestionAnwsers[" + item.ChoiceQuestionAnwserID + "].Question", item.Question, new { @id = "ChoiceQuestionAnwsers_" + item.ChoiceQuestionAnwserID + "__Question" })
@Html.Hidden("ChoiceQuestionAnwsers[" + item.ChoiceQuestionAnwserID + "].QuestionID", item.QuestionID, new { @id = "ChoiceQuestionAnwsers_" + item.ChoiceQuestionAnwserID + "__QuestionID" })
</td>
<td>@Html.Editor("ChoiceQuestionAnwsers[" + item.ChoiceQuestionAnwserID + "].Text", item.Text, new { @id = "ChoiceQuestionAnwsers_" + item.ChoiceQuestionAnwserID + "__Text" })
</td>
<td><a href='#' data-bind='click: $root.removeGift'>Usuń</a></td>
</tr>
}
誰か助けてもらえますか?