ASP.NET-MVC中Form Form上的FormCollection为空

时间:2009-02-02 20:12:25

标签: c# asp.net asp.net-mvc

我使用过去经常使用的方法发布一个非常简单的表单。显示我的代码可能更容易,而不是输入冗长的解释。这是HTML:

<% Html.BeginForm("CreateMarketingType", "ListMaintenance"); %>
    <div id="ListMaintenanceContainer">
        <table>
            <tr>
                <th>Marketing Type Id</th>
                <th>Marketing Type Name</th>
            </tr>                    
                <%foreach (MarketingType marketingType in ViewData.Model.MarketingTypes) %>
                <%{ %>
                    <tr>
                        <td><%= marketingType.MarketingTypeId.ToString() %></td>
                        <td><%= marketingType.MarketingTypeName %></td>
                    </tr>
                <%} %>
        </table>
        <div>
            <fieldset id="fsSaveNewMarketingType">
                <legend>Add New Marketing Type</legend>
                <label for="txtNewMarketingTypeName">New Marketing Type Name:</label>
                <input type="text" id="txtNewMarketingTypeName" />
                <input type="submit" value="Save" id="CreateMarketingType" />
            </fieldset>
        </div>                    
    </div>
<% Html.EndForm();%>

这是控制器代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateMarketingType(FormCollection form)
{
    string newMarketingTypeName = Request.Form["txtNewMarketingTypeName"].ToString();

    MarketingType newMarketingType = new MarketingType() { MarketingTypeName = newMarketingTypeName };

    _marketingTypeRepository.AddNewMarketingType(newMarketingType);

    return View("ListMaintenance", GetModel());
}

提交按钮发布表单,并调用该方法,但我的参数中定义的表单对象为空。我也试过Request.Form,我得到了相同的结果。我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:89)

您的所有输入都没有名称属性。没有名字=不在FormCollection中。

答案 1 :(得分:3)

我遇到了这个问题,然后意识到我在提交表单之前已经禁用了所有的INPUT控件(作为UX功能)。

答案 2 :(得分:0)

希望我可以发布这个简单的评论,但我没有那个特权...我添加了所有的名字属性,但仍然没有快乐。请记住将您的name属性添加到表单本身。必须使用接受htmlAttributes的HTML.BeginForm的重载。

答案 3 :(得分:0)

我看到这个问题已经回答了。以下是我在MVC视图中使用的另一种方法,当表单集合为空时。使用JavaScript / jQuery,它将名称 - 值对设置为隐藏的控件,该控件将附加到表单。

JavaScript / jQuery

 $("#btnExport").click(function (event) {
                event.preventDefault();

                //Append the parameter to the form
                var practiceVal = $('#Practice').val();
                $('<input />').attr('type', 'hidden')
                   .attr('name', "Practice").attr('value', practiceVal)
                   .appendTo('#formHome');

                //Submit
                $('#formHome').submit();
            });

<强>表格

 <form id="formHome" method="post">
 </form>

参考Forms

  

当提交表单进行处理时,某些控件的name与其当前值配对,并且这些对与表单一起提交