无法弄清楚为什么MVC View没有将值传递给Firefox浏览器中的操作

时间:2014-01-06 19:23:23

标签: c# asp.net-mvc

控制器中的动作:

public JsonResult ChangeGrowerTrainingDate(long growerId)
{
    //Do something   
}

查看:

@using (Ajax.BeginForm("ChangeGrowerTrainingDate", "Grower", null, new AjaxOptions { OnSuccess = "TrainingDateChanged" }, new {@class=applicant.Id }))
{
   Html.Hidden("growerId", applicant.Id)
   //More stuff
}

我无法弄清楚为什么“growerId”没有从视图传递到控制器中的动作,只有Firefox在所有其他浏览器中出现问题一切正常。甚至可以在IE中使用。

1 个答案:

答案 0 :(得分:3)

好吧,我想通了,因为html没有通过正确的语法验证,firefox在隐藏输入之前关闭了表单标签。这就是我所拥有的以及导致问题的原因:

@using(Html.BeginForm(......)) 
{
 <tr><td>@Html.Hidden("growerId", aplicant.Id)</td></tr> 
}

FireFox将其渲染为:

 <form action="" method="post"></form>
<tr><td><input type="hidden" name="growerId" /></td></tr>

正如我们所看到的,当FireFox在呈现HTML并且我的隐藏输入位于表单之外时,它正在关闭表单标记,这就是为什么没有任何内容被提交到控制器中的操作。

我通过将表单移动到TD标签来修复它:

<tr><td>
  @using(Html.BeginForm(......)) 
  {
    @Html.Hidden("growerId", aplicant.Id)
  }
</td></tr> 

这解决了这个问题。