2012-09-24 6 views
10

Ich habe einfache AJAX-Form in MVC. In AjaxOptions ist OnComplete auf eine einfache JavaScript-Funktion eingestellt, die eine Sache macht - gibt false zurück.Ajax.BeginForm mit OnComplete immer aktualisiert Seite

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { UpdateTargetId = "DivFormId", HttpMethod = "Post", OnComplete = "preventUpdate" })) 

function preventUpdate(xhr) { 
    return false;  
} 

Das Problem ist, dass diese Seite bereits aktualisiert wurde. Z.B. In einem Fall gibt der Controller eine Teilansicht nach dem Postback zurück, in anderen Fällen gibt er ein Json-Objekt zurück. Ich möchte, dass die Seite aktualisiert wird, wenn die Teilansicht zurückgegeben wird, und dass das Dialogfeld angezeigt wird, wenn json zurückgegeben wird. Leider, wenn json zurückgegeben wird, löscht es die Seite (aktualisieren Sie es mit JSON), selbst wenn OnComplete-Funktion false zurückgibt, wie MSDN sagt: Um die Seitenaktualisierung abzubrechen, geben Sie false von der JavaScript-Funktion zurück.

Wie kann man die Seitenaktualisierung in Abhängigkeit von der empfangenen Antwort verhindern?

Vielen Dank!

----- UPDATE -------

Bisher fand ich folgende Lösung. Wenn ich UpdateTargetId nicht spezifiziere, kann ich manuell mit der Antwort was ich will. Aber es ist immer noch kein dokumentiertes Verhalten mit return false.

+0

Vielleicht wird dies helfen, auch einen Blick auf den ersten Kommentar http://stackoverflow.com/a/1357151/985284 –

+1

dies nicht der Fall ist (aber natürlich habe ich auch diese zwei Methoden versucht). Dies ist MS-Behandlung für Ajax.BeginForm mit Ereignissen wie OnBegin, OnComplete, ... und OnComplete nach MSDN-Dokument sollte möglich sein, durch die Rückgabe false zu stoppen. –

Antwort

22

Verwenden Sie OnSuccess und loswerden UpdateTargetId. Wie folgt aus:

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "Post", OnSuccess = "foo" })) 
{ 
    ... 
} 

und dann:

function foo(result) { 
    if (result.SomePropertyThatExistsInYourJsonObject) { 
     // the server returned a JSON object => show the dialog window here 
    } else { 
     // the server returned a partial view => update the DOM: 
     $('#DivFormId').html(result); 
    } 
} 
+0

'$ ('# DivFormId') .html (result.responseText);' arbeitete für mich – Filip

+0

Um Ajax.BeginForm verwenden zu können, benötigen Sie die folgende Javascript-Datei (die nicht standardmäßig in der MVC 5 Vorlage enthalten ist): jquery. unaufdringlich-ajax.js https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/3.2.3 – Baxter

Verwandte Themen