2010-10-01 24 views
8

我用这样的更新与局部视图一个div:如何使用Ajax.BeginForm更新div并执行javascript函数?

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

及其工作正常,返回的视图获取appened到div,但我现在需要时,职位是执行一个javascript成功了,所以我想:“很简单,只需将OnSuccess = "MyJsFunc()"”添加到AjaxOptions,但是这样做后,它就停止工作了!现在页面刷新,只有返回的局部视图呈现:(,我甚至尝试过一个简单的Alert("Hi"),它的工作也不正常。的https://stackoverflow.com/questions/1994754/execute-javascript-after-loading-a-mvc-page-using-ajax-beginrouteform一个DUP,但这个问题得到了与没有答案废弃)

+0

+1在这个问题上;我相信我自己也看到了同样的行为;使用ASP.NET 4.0与MVC2和C#。每次我将一个OnSuccess成员值添加到AjaxOptions时,Ajax表单似乎变成了常规表单。我刚刚开始使用jQuery.form来提交这些表单,但我也想弄清楚这一点! – 2010-10-01 16:11:56

+0

嗯我也在使用ASP。NET 4和MVC2和C# – 2010-10-01 16:15:29

+0

[将JavaScript函数分配给AjaxOptions OnSuccess属性引发错误 - ASP.NET MVC]可能的重复(http://stackoverflow.com/questions/695729/assign-a-javascript-function-to -ajaxoptions-onsuccess-property-raise-an-error -a) – bzlm 2011-04-09 21:38:17

回答

16

任何不以正确的方式做的理由(毕竟我们在2010年)?转储MS AJAX所在的位置以及依赖它的所有Ajax.*助手,并编写正确的代码。在传统的webforms中使用MS AJAX可能会因为UpdatePanel等原因而被证明是合理的...现在在新的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 form plugin

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

这种方法的好处:

01无头痛:
  • 不显眼的
  • 标记和JavaScript
  • 缓存JavaScript文件和减少带宽使用

奖金利益之间的明确分离。

+0

如何将模型ID传递给.ajax函数? – 2011-03-28 09:45:25

+0

@尼克马索,你可以把它作为隐藏的领域内的形式。 – 2011-03-28 13:38:16

+0

@Nick Masao,你也可以在传递给ajax选项的选项块中包含一个'data'选项。 I.E. $ .ajax({...,data:{id:@ Model.id},...}); – Brian 2011-04-13 01:28:49