2

asp.net mvcで動的に生成されたフォーム送信を処理するには?

フォームは動的に作成され (要素の数、順序、およびタイプは常に異なります)、asp.net mvc のコントローラーでそれを処理する (データベースにデータを格納する) 必要があります (viewstate はありません)。入力のタイプはすべてです。非表示フィールド、ラジオ ボタン、チェック ボックス、テキスト入力など。

<% using (Html.BeginForm("AddAnswer","Research")){ %>

<%= Html.Hidden("page", ViewData["curentPage"]) %>

<% foreach (var item in Model){ %>

<span><%= Html.Encode(item.Text) %></span>
    <%= Html.ActionLink("Edit", "Edit", new {id=item.QuestionID}) %>
    |
    <%= Html.ActionLink("Details", "Details", new { id=item.QuestionID })%>

    <%switch (item.QuestionTipe.QuestionTipeID){

        case 4:%>
        <table>
            <%foreach (var offeredAnswer in item.OfferedAnswer) {%>
                <tr>
                    <td><%= Html.CheckBox("q" + item.QuestionID, false, new{ value = offeredAnswer.Number})%></td>
                    <td><%= offeredAnswer.Text%></td>
                </tr>
            <%}%>
        </table>
        <% break;

        case 1:%>
        <table>
            <% foreach (var offeredAnswer in item.OfferedAnswer) {%>
                <tr>
                    <td><%= Html.RadioButton("q" + item.QuestionID, false, new{ value = offeredAnswer.Number})%></td>
                    <td><%= offeredAnswer.Text%></td>
                </tr>
            <%}%>
        </table>

        <% break;

        case 2:%>
        <div style="width:220px; height:20px; padding-top:10px; padding-left:8px;">
            <%= Html.TextBox("q" + item.QuestionID, null, new { style = "width:200px;"})%>
        </div>
        <% break;

        case 3:%>
        <div style="width:220px;height:20px; padding-top:10px;padding-left:8px;">
            <div id="q<%= item.QuestionID %>" style="width:200px;" class="slider">
            </div>
            <%= Html.Hidden("q" + item.QuestionID, 0)%>
        </div>
        <% break;
    }%>
<%}%>

<p>
    <input type="submit" value="Sljedeća strana" />
</p>
<%}%>
4

3 に答える 3

4

アクション メソッドでは、FormCollection パラメーターにアクセスできます。そこから、送信アクションから渡されたすべての値にアクセスできます。

public ActionResult YourActionMethod(FormCollection form)
{

}
于 2009-08-24T14:45:33.767 に答える
1

フォームの処理方法を決定するのに最も役立つように、追加情報が役立つ場合があります。

  • 何かがこのフォームを生成する決定を下しています。何がそれを行っているのでしょうか? そのレンダリングは何に基づいていますか?

  • 説明できる形式の既知のバリエーションはありますか、それとも要素は互いに本当に独立していますか?

  • それぞれの要素自体はわかっていますか? もしそうなら、サーバー側で認識できるように一貫したID/名前を与えることは可能ですか?

  • 提出物の「処理」について話すとき、達成したい最終目標は何ですか? たとえば、フォームを解析してデータベースに保存していますか?

于 2009-08-25T13:24:33.337 に答える
0
foreach (var key in form.AllKeys) {
                    var answers = form.GetValues(key);

                    if (answers.Count() > 1){
                        foreach (var value in answers)
                        {
                            ...
                        }
                    }

                    else
                    {
                        ...
                    }
}

これは非常に簡単です。フォームの回答の一部に複数の値があるかどうかを確認しています。

于 2009-08-28T06:28:39.397 に答える