当MVC3 Html.TextBoxFor的内容发生变化时提交表单

时间:2011-07-28 17:13:35

标签: javascript asp.net-mvc-3 razor asp.net-ajax

这应该相当容易,但我尝试了一些没有运气的事情。

我在一个页面上有一系列Html.TextBoxFor字段,每个字段都位于自己的Ajax.BeginRouteForm内。在每个框旁边,我有一个提交按钮,当单击它时,会根据需要执行Ajax更新。

我想自动执行此操作,以便当用户更改字段中的值(onchange事件)时,表单的提交方式与当前使用提交按钮的方式相同。

我尝试使用htmlattributes为onchange事件分配一个JavaScript函数(如下所示),这会导致表单提交,但它重定向页面而不是以ajax方式工作(而不是单击正常工作的提交按钮。

@(Html.TextBoxFor(model => answer.Value, new { onchange = "document.forms[" + answer.AnswerID + "].submit()" }));

(幸运的是我的answer.AnswerID是数字,并且与表单集合中相应表单的数字位置匹配;我是按名称引用它们但是Razor(或其他东西)是htmlencoding我的JavaScript代码......)

我唯一的猜测是,我通过将代码直接附加到onchange事件来破坏某些东西,但我对于挂钩到该事件链的“正确”方式感到茫然。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

在表单上调用submit()会忽略所有submit事件处理程序as seen here。你可以

  1. call the event handler directly
  2. call click() on the submit button for the form
  3. 如果你使用onsubmit并返回false而不是使用event参数来回调,那么前者效果最好,因为否则你需要传递另一个混乱的对象。