2012-03-25 16 views
1

Obwohl ich Dutzende von Antworten gelesen habe, konnte ich keine Lösung finden. Ich benutze MVC 3 mit Razor. Ich habe eine einfache Form mit Client-Validierung über Ajax. Dieser Teil funktioniert gut. Mein Problem ist: In der Update-Aktion meines Controllers möchte ich auf eine andere Aktion umleiten. Wenn der Benutzer JavaScript deaktiviert, funktioniert das problemlos. Aber mit Javascript/Ajax scheint die Redirectaction nicht zu funktionieren. Stattdessen sieht es so aus, als ob eine Art Teilansicht oder etwas ähnliches ausgeführt wird.Ajax submit Umleitung MVC 3

Mein Controller/Aktion-Code:

Function UpdateItem(Item As CItem) As ActionResult 

    ' some validation code, save etc. 

    if everythingok then 
     Return RedirectToAction("Updatesuccess") 
    else 
     Return RedirectToAction("EditItem") 
    endif 

End Function 

Meine HTML-Seite sieht aus wie (verkürzt/pseudo):

Logo image 
H1 
some text 

<form>....</form> 

Wenn das Formular über Ajax-Code der neue HTML vorgelegt hinzugefügt wird darüber hinaus "Irgendein Text", so wird das Formular ersetzt, aber alles über dem ersetzten Formular bleibt auf der Seite. Wenn Ajax/JavaScript deaktiviert ist, wird nach dem Senden eine neue Seite geladen. Ich habe die HTTP-Header überprüft und festgestellt, dass es bei Ajax keine Weiterleitung gibt (was in gewisser Weise logisch ist, weil es Ajax ist). Was kann ich tun? Ich möchte auf eine neue Seite umleiten.

Ist es möglich, das Ajax-Submit zu deaktivieren und nur das "normale" Formular-Submit zu verwenden? Ich mag die Client-Validierung über Ajax, während der Benutzer Daten eingibt und ich möchte dies verwenden, aber für mich wäre es gut genug, wenn das Einreichen eine "normale" Übermittlung wäre.

Ich hoffe jemand versteht was ich will und kann mir helfen.

Danke.

Antwort

3

Ich bin nicht 100% sicher, ob ich verstehe Ihre Frage, aber was zum Teufel, nicht downvote mich nicht :)

Das Problem ist, leitet Werke über das Senden eine Httpresponse mit der Umleitung in den Headern angegeben , die der Browser versteht. Wenn Sie über AJAX senden, ist es nicht der Browser, der die Anfrage bearbeitet, es ist Ihr eigener JS-Code.

Hier ist der Trick: Anstatt eine Weiterleitung zurückzugeben, geben Sie die URL zurück (vorzugsweise als json) und leiten Sie dann manuell um window.location. Ich bin in VB nicht fließend, hier ist, wie ich es in C# tun würde:

var url = new UrlHelper(this.ControllerContext.RequestContext); 
var link = url.Action("UpdateSuccess"); 
return Json(new {link}); 

und dann in jQuery:

$.ajax({ method: 'POST', 
      url: 'your post url', 
      success: function(result) {window.location = result.link; }, 
      // ... (passing form etc) 
    }); 
+0

Vielen Dank für Ihre Antwort. Da ich bei js nicht so stark bin, brauchte ich eine Weile, um es zum Laufen zu bringen, aber es ist in Ordnung. –