如何使用Ajax.BeginForm更新div并执行javascript函数?

我通过使用类似的东西更新部分视图的div:

 

并且它的工作正常,返回的视图被添加到div,但是我现在需要在post成功时执行javascript,所以我想:“简单,只需将OnSuccess = "MyJsFunc()"添加到AjaxOptions ,但是这样做后,它停止了工作! 现在页面被刷新,只返回部分视图:(,我甚至试过一个简单的Alert("Hi") ,它也没有工作..我怎么能让这个工作?

(顺便说一下,我认为这可能是一个重复的https://stackoverflow.com/questions/1994754/execute-javascript-after-loading-a-mvc-page-using-ajax-beginrouteform但这个问题被废弃了回答)

没有正确做到这一点的任何理由(毕竟我们在2010年)? 转储它所属的MS AJAX以及依赖它并编写正确代码的所有Ajax.*帮助程序。 虽然在经典webforms中使用MS AJAX可能是合理的,因为UpdatePanels等…今天在新的ASP.NET MVC应用程序中执行它,特别是在Microsoft完全接受jQuery之后,这似乎是一个坏主意。

所以在这之后的咆哮是我的建议:

 <% using (Html.BeginForm("Action", "Controller", new { id = Model.id }) { %> 

然后使用jquery在一个单独的文件中不引人注意地附加提交处理程序:

 $(function() { $('form').submit(function() { $.ajax({ url: this.action, type: this.method, success: function(result) { // feel free to execute any code // in the success callback $('#result').html(result); } }); return false; }); }); 

或使用优秀的jquery表单插件 :

 $(function() { $('form').ajaxForm(function(result) { // feel free to execute any code // in the success callback $('#result').html(result); }); }); 

这种方法的好处:

  • 不显眼的
  • 标记和JavaScript之间的明确分离
  • 缓存javascript文件并减少带宽使用

奖金福利:没有头痛。

我一直环顾四周,找到了答案:

将Javascript函数分配给AjaxOptions OnSuccess属性引发错误 – ASP.NET MVC (未选择答案)

引用Atzu

如果必须将任何参数传递给OnSuccess事件,则可能必须以这种方式编写函数。

 OnSuccess = "function(){exampleFunction('" + param1 + "');} 

它对我有用!