当前位置:  开发笔记 > 后端 > 正文

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

如何解决《Asp.NETMVCAjaxOptionsOnSuccess太火了太早了?》经验,为你挑选了2个好方法。

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

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

哪里我错了?

先谢谢,山

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

主页/索引视图:


<% using (Ajax.BeginForm("DoLongTask", "Home", new AjaxOptions() { UpdateTargetId = "divPlaceholder", InsertionMode = InsertionMode.Replace, OnSuccess = "alert('onsuccess fired')" })) { %> <% } %>

HomeController的

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

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



1> 小智..:

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

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


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

2> Webmonger..:

我一直在研究这个问题,似乎"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')"

 }

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

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

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

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有