Asp.NET MVC AjaxOptions OnSuccess feuert.. zu früh?
Ich würde gerne die OnSuccess Möglichkeit, AjaxOptions vergangen, als Ajax.BeginForm argument "etwas tun", sobald die Antwort vollständig empfangen wurde und das DOM aktualisiert. Soweit ich undestand von MSDN, das ist, was diese option tut.
In meiner Anwendung, OnSuccess script feuert zu früh, sofort nach dem die Anfrage gesendet wird. Ich schlafen den thread für eine Weile, um besser zu sehen, das Ergebnis. Ich soll zu sehen, die OnSuccess-Skript (eine Warnung) ausgelöst, nachdem der Schlaf die Zeit, sagen wir 2 Sekunden. Ich verwende Firebug um zu sehen, was passiert unter der Haube, und alles, was ich sehe, ist: ich klicke auf den button (submit in der ajax-form), Warnmeldung (2 Sekunden vor dem erwarteten), nach 2 Sekunden firebug zeigt die Anfrage-Antwort und nichts passiert mehr.
Wo bin ich falsch?
Vielen Dank im Voraus,
mt
Einige Beispiel-code, wie richtig gefragt (ich begann eine leere neue Lösung mit Asp.NET MVC template in VS):
Home/Index 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>
HomeController
public ActionResult DoLongTask()
{
if (Request.IsAjaxRequest())
{
System.Threading.Thread.Sleep(2000);
return View();
}
else
{
throw new NotSupportedException();
}
}
Ich denke, das ist genug, um das Verhalten zu reproduzieren. Eine leere partielle view verwendet werden kann, wie DoLongTask anzeigen.
Code Hinzugefügt, wie (richtig) gefragt!
InformationsquelleAutor ccalboni | 2009-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bin ich auf der Suche, um dieses problem, und es scheint, dass das "Auf" Ereignisse sind nicht ganz das, was Sie scheinen.
Wenn Sie dies Lesen, post Wie ist OnSuccess gemessen ASP.NET MVC ActionLink? sehen Sie womp sagen, dass die Ereignisse ausgelöst werden kann, egal was passiert im controller. Ich habe auch festgestellt, das in den tests habe ich durch das hinzufügen des "Auf" - Veranstaltungen zu den AjaxOptions Objekt wie folgt:
Habe ich nicht verwendet, die AjaxOptions in allen Produktions-code, den ich geschrieben habe, aber ich habe großen Erfolg mit jQuery, Ajax-Aufrufe und die events feuern auf die richtigen Zeiten.
Einem tutorial auf ASP.net MVC und jQuery-Ajax-finden hier und einige Beispiele der Verwendung von Ereignissen im code gefunden werden können, die auf diese Frage
Sorry, ich war nicht in der Lage, Ihr problem zu lösen, aber ich hoffe diese alternative hilft.
Ich habe aufgelegt ein paar asp.net mvc-Anwendungen jetzt und beide mich und meine Entwickler jQuery und asp.net MVC arbeiten toll zusammen. Es gibt viele gute Beispiele für gute Praxis gibt, auch. weblogs.asp.net/rashid/archive/2009/04/03/...
Siehe Paul McCaskie Antwort... es ist das richtige. Dies ist das normale benutzen für jquery oder javascript. Wenn Sie tun die gleiche Sache in ein jquery-event-Aufruf das gleiche geschehen wird. Sie müssen geben Sie den Namen einer Funktion oder wickeln Sie Ihren code mit function () { }
InformationsquelleAutor Webmonger
Nicht sicher, wie hilfreich das sein wird, aber ich Suche in etwas wie das zu tun im moment, und haben gefunden, wenn Sie rufen eine Funktion innerhalb der OnSucess dann wird es geschehen, nachdem der action-Methode, zum Beispiel:
function() {}
format arbeitete für mich, vielen Dank.ja, dies funktioniert wie erwartet für mich.
arbeitete für me tooo 🙂 .Vielen Dank
Dies ist die richtige Antwort. Sie geben den Namen einer Funktion oder wickeln Sie den code mit einer Funktion () {}. Dies ist standard in jquery. Dasselbe geschieht in einem anderen jquery-Ereignis-Zuordnung.
Nur um zu bestätigen,
function() {}
funktioniert, wiefunctionName
aber nichtfunctionName(parameter)
InformationsquelleAutor Paul McCaskie
OnSuccess ist eine Eigenschaft, die den Namen der Funktion oder die Funktion, wie im obigen Fall (keine Aussage). Und AjaxOptions callsback die Methode für die Bezeichnung vorgesehen ist, nach Erfolg, Misserfolg, ... Hoffe, das hilft
InformationsquelleAutor Muhammed Ali
Aufruf einer Funktion Wie
Funktion showAlert(){
alert("Hallo Welt");
}
Call-in Ajax Beginnen
onSuccess="showAlert"
ohne Klammern
InformationsquelleAutor Samme
Gerade getestet OnSuccess-callback-in MVC 3 und es scheint behoben zu sein.
InformationsquelleAutor nthpixel