0

次のように宣言された「調査」ページがあります。

@using (Html.BeginForm("Survey", "Home", new { questionList = Model.Questions }, FormMethod.Post))
{
    <div class="survey">
        <ol class="questions">
            @foreach (Question q in Model.Questions)
            {
                <li class="question" id="@q.QuestionName">
                    @q.QuestionText<br />
                    @foreach (Answer a in q.Answers)
                    {
                        <input class="answer" id="@a.DisplayName" type="checkbox" /><label for="@a.DisplayName">@a.AnswerText</label>
                        if (a.Expandable)
                        {
                        <input type="text" id="@a.DisplayNameFreeEntry" maxlength="250" /> <span>(250 characters max)</span>
                        }
                        <br />
                    }
                </li>
            }
        </ol>
    </div>
    <div class="buttons">
        <input type="submit" value="Finish" />
    </div>
}

コードをステップ実行すると、調査を処理するために設定したメソッドにヒットします。

[HttpPost]
public ActionResult Survey( List<Question> questionList, FormCollection postData)
{
     //Process Survey
}

ただし、ステップスルーすると、変数questionListがnullであり、変数postDataにフォームからのデータが含まれていないことがわかります。経由でチェックボックスにアクセスしようとしてRequest[a.Displaynameも機能しません。

私が読んだことはすべて、これが Model から送信メソッドに値を永続化する正しい方法であり、この方法で FormCollection にアクセスできるはずであることを示しています。

私は何を間違っていますか?

4

3 に答える 3

1

ページの非表示フィールドとして questionList を保存する必要があります。非プリミティブ型は、単に渡すだけでは保持されません。

あなたがそれを行うことができる1つの方法は

@Html.HiddenFor(m => m.Foo)

または、このように HTML で直接行うこともできます

<input type="hidden" name="Var" value="foo">

ここで、m はモデルです。

于 2013-07-12T21:14:33.310 に答える