1

私はこのモデルを持っています:

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>
}

誰か助けてもらえますか?

4

1 に答える 1

0

フォームを厳密に入力してみてください:

@for (int i = 0; i < Model.ChoiceQuestionAnwsers.Count; i++) 
{
    @Html.CheckBoxFor(m => m.ChoiceQuestionAnwsers[i].IsCorrect)
    ...
}

部分ビューの内部。

于 2013-02-15T23:21:15.673 に答える