控制器中的动作:
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中使用。
答案 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>
这解决了这个问题。