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

Fra*_*ega 10 c# asp.net-mvc asp.net-ajax partial-views

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

<% using (Ajax.BeginForm("Action", "Controller",
               new { id=Model.id },
               new AjaxOptions
               {
                   UpdateTargetId = "divId",
                   InsertionMode = InsertionMode.InsertAfter,
               }))
   {  %>
Run Code Online (Sandbox Code Playgroud)

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

(顺便说一句,我认为这可能是一个重复的/sf/ask/139632811/但是这个问题被废弃了回答)

Dar*_*rov 16

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

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

<% using (Html.BeginForm("Action", "Controller", new { id = Model.id }) { %>
Run Code Online (Sandbox Code Playgroud)

然后使用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;
    });
});
Run Code Online (Sandbox Code Playgroud)

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

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

这种方法的好处:

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

奖金福利:没有头痛.


Fra*_*ega 5

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

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

引用Atzu

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

OnSuccess = "function(){exampleFunction('" + param1 + "');}
Run Code Online (Sandbox Code Playgroud)

它对我有用!