gpt4 book ai didi

asp.net-mvc - Asp.NET MVC AjaxOptions OnSuccess 触发.. 为时过早?

转载 作者:行者123 更新时间:2023-12-04 01:19:43 25 4
gpt4 key购买 nike

我想使用作为 Ajax.BeginForm 参数传递的 AjaxOptions 的 OnSuccess 选项来“做某事”,一旦完全收到响应并更新 DOM。据我从 MSDN 了解,这就是这个选项的作用。

在我的应用程序中, OnSuccess 脚本在发送请求后立即触发太早。我让线程休眠一段时间,以更好地查看结果。我应该看到 OnSuccess 脚本(警报)在该 sleep 时间(例如 2 秒)之后触发。我使用 Firebug 来查看幕后发生的事情,我看到的只是:我单击按钮(在 ajax 表单内提交),显示警报(比预期提前 2 秒),2 秒后 firebug 显示请求-响应,什么也没有更多发生。

我错在哪里?

提前致谢,
公吨

一些示例代码,如正确要求(我在 VS 中使用 Asp.NET MVC 模板开始了一个空白的新解决方案):

主页/索引 View :

<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>

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

我认为这足以重现该行为。空的局部 View 可以用作 DoLongTask View 。

最佳答案

我一直在研究这个问题,似乎“开”事件并不像它们看起来的那样。

如果您阅读这篇文章 How is OnSuccess measured for a ASP.NET MVC ActionLink?你会看到 womp 说无论 Controller 中发生什么,事件都可能会触发。我还在测试中发现了这一点,我通过将所有“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 的教程 here可以在 this question 上的代码中找到如何使用事件的一些示例。

抱歉,我无法解决您的问题,但我希望此替代方法会有所帮助。

关于asp.net-mvc - Asp.NET MVC AjaxOptions OnSuccess 触发.. 为时过早?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com