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)
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的教程可以在这里找到,有关如何使用事件的一些示例可以在这个问题的代码中找到
对不起,我无法解决您的问题,但我希望这个替代方案会有所帮助.
归档时间: |
|
查看次数: |
27676 次 |
最近记录: |