2009-02-02 56 views
28

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

<% 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,并得到了相同的结果。我在这里错过了什么吗?

回答

82

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

+8

哎 - 这就是我得到的成长在WebForms!我认为id属性传递了表单上的值。谢谢回复!! – 2009-02-02 20:33:14

+1

谢谢!我也认为ID属性会这样做... – 2009-03-15 10:34:42

0

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

3

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

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 PA与他们目前的价值,这些对提交的形式