Asp.NET MVC AjaxOptions OnSuccess太火了......太早了?

cca*_*oni 11 asp.net-mvc asp.net-ajax

我想在完全接收响应并更新DOM后,使用AjaxOptions的OnSuccess选项作为Ajax.BeginForm参数传递给"做某事".至于我可以从MSDN中找不到,这就是这个选项的作用.

在我的应用程序中,OnSuccess脚本在发送请求后立即过早触发.我让线程睡了一会儿,以便更好地看到结果.我应该看到OnSuccess脚本(一个警报)在那个睡眠时间之后被触发,比如2秒.我使用Firebug来查看引擎盖下发生了什么,我看到的只是:我点击按钮(在ajax表单内提交),显示警报(预期前2秒),2秒后firebug显示请求 - 响应,没有更多的事情.

哪里我错了?

先谢谢,山

一些示例代码,正确的问题(我在VS中使用Asp.NET MVC模板启动了一个空白的新解决方案):

主页/索引视图:

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<div id="divPlaceholder">
<% 
    using (Ajax.BeginForm("DoLongTask", "Home", 
    new AjaxOptions() {
        UpdateTargetId = "divPlaceholder", 
        InsertionMode = InsertionMode.Replace,
        OnSuccess = "alert('onsuccess fired')"
    })) 
{
%>
<input type="submit" value="button" />
<% } %>
</div>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)

HomeController的

public ActionResult DoLongTask()
{
    if (Request.IsAjaxRequest())
    {
        System.Threading.Thread.Sleep(2000);
        return View();
    }
    else
    {
        throw new NotSupportedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这足以重现这种行为.空局部视图可用作DoLongTask视图.

小智 24

不知道这会有多大帮助,但我现在正在考虑做这样的事情,并且发现如果你在OnSucess中调用一个函数,那么它将在action方法之后发生,例如:

using (Ajax.BeginForm("DoLongTask", "Home", 
    new AjaxOptions() {
        UpdateTargetId = "divPlaceholder", 
        InsertionMode = InsertionMode.Replace,
        OnSuccess = "function() { alert('onsuccess fired'); }"
    })) 
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.您必须提供函数的名称或使用函数(){}包装代码.这是jquery的标准.在任何其他jquery事件分配中都会发生同样的事情. (4认同)

Web*_*ger 10

我一直在研究这个问题,似乎"On"事件并不像它们看起来那样.

如果您阅读这篇文章如何测量ASP.NET MVC ActionLink的OnSuccess?你会看到womp说无论控制器发生什么,事件都可能触发.我在测试中也发现了这一点,我将所有"On"事件添加到AjaxOptions对象中,如下所示:

new AjaxOptions()
 {
     UpdateTargetId = "divPlaceholder",
     InsertionMode = InsertionMode.Replace,
     OnSuccess = "alert('OnSuccess')",
     OnBegin = "alert('OnBegin')",
     OnComplete = "alert('OnComplete')",
     OnFailure = "alert('OnFailure')"

 }
Run Code Online (Sandbox Code Playgroud)

我没有在我编写的任何生产代码中使用AjaxOptions,但是我在jQuery Ajax调用和在正确时间触发的事件方面取得了巨大成功.

有关ASP.net MVC和jQuery Ajax的教程可以在这里找到,有关如何使用事件的一些示例可以在这个问题的代码中找到

对不起,我无法解决您的问题,但我希望这个替代方案会有所帮助.