如何处理动态创建的表单提交?

时间:2009-08-24 12:52:09

标签: asp.net asp.net-mvc webforms form-submit

如何在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>
<%}%>

3 个答案:

答案 0 :(得分:4)

在您的操作方法中,您可以访问FormCollection参数,从那里,您可以从提交操作中访问所有传入的值。

public ActionResult YourActionMethod(FormCollection form)
{

}

答案 1 :(得分:1)

为了最好地帮助您决定如何处理表单,获得一些其他信息可能会有所帮助。

  • 有什么决定要生成这个表单,这是做什么的?什么是基于它的渲染?

  • 是否存在可以解释的形式的已知变体,或者这些元素是否真正相互独立?

  • 每个元素本身都是已知的吗?如果是这样,是否可以为它们提供一致的ID /名称,以便在服务器端识别它们?

  • 当您谈到“处理”提交内容时,您希望实现的最终目标是什么?例如,您是否正在解析要存储在数据库中的表单?

答案 2 :(得分:0)

foreach (var key in form.AllKeys) {
                    var answers = form.GetValues(key);

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

                    else
                    {
                        ...
                    }
}

这很简单。我正在检查表单中的某些答案是否有多个值。