2017-04-26 2 views
0

Ich habe eine AJAX-Funktion innerhalb meiner _Layout.cshtml Teilansicht, die von allen Ansichten verwendet wird, die auf SignIn(). Wenn die Anmeldung nicht erfolgreich ist, sollte sie an SignInFailed() umleiten und die Ansicht einfach zurückgeben. Stattdessen kehrt es nach dem Zurückgeben der Ansicht zurück zur ursprünglichen Ansicht.ASP.NET MVC Verhindern Aktion Umleitung mit AJAX

Ich erhalte keine Ausnahmen oder Fehler, die verhindern würden, dass es in SignInFailed() bleibt.

Hier ist meine AJAX:

$.ajax({ 
      type: "POST", 
      traditional: true, 
      url: "@Url.Action("SignIn", "Home")", 
      data: { user: name, password: code, pageName: urlPage }, 
        success: function() { 
         ///do stuff 
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         if (debug) { 
          alert(XMLHttpRequest.responseText); 
          alert(textStatus); 
          alert(errorThrown); 
         } 
        } 
}); 

Warum auf die ursprüngliche Ansicht wird Umleitung zurück, wenn es keine Anweisung, dies zu tun ist und was kann ich tun, um dieses Verhalten zu verhindern?

+3

Sein nicht wieder auf den ursprünglichen view_ _redirecting. Es ist ein Ajax-Anruf und Ajax-Anrufe nie umleiten - Sie haben die Seite nie verlassen. Der ganze Sinn von Ajax ist es, auf der gleichen Seite zu bleiben. –

+0

@StephenMuecke Ich sehe. Selbst wenn ich die Aktion auf '' 'RedirectToAction'' zurückstellen lasse, bleibt sie auf der gleichen Seite? – Sicypher

+2

Ja. (das ist der ganze Zweck von Ajax) –

Antwort

1

Wie Stephen Mücke in den Kommentaren zu meiner Frage sagt, AJAX wurde entwickelt, um Daten zu posten und zu erhalten, ohne die Seite zu aktualisieren oder umzuleiten; Deshalb hat meine vorherige Methode nicht funktioniert. Anstatt zu versuchen, im Backend umzuleiten, gebe ich JSON vom Backend zurück und lasse das Frontend wissen, ob die Anmeldung erfolgreich war. Je nach Ergebnis leite ich dann um oder aktualisiere mit JavaScript.

Ich änderte meine SignIn() Aktion JSON zurück:

public ActionResult SignIn(string user, string password) 
{ 
    //Some database stuff validating username and password 
    if (loginSuccessful) 
    { 
     return Json(new { status = "success" }); 
    } 
    else 
    { 
     return Json(new { status = "failure", redirectUrl = "/Home/SignInFailed" }); 
    } 

} 

und ich änderte meine AJAX:

$.ajax({ 
      type: "POST", 
      traditional: true, 
      url: "@Url.Action("SignIn", "Home")", 
      data: { user: name, password: code }, 
        success: function (result) { 

         if (result.status == "success") { 
          location.reload(); 
         } 
         else { 
          location.href = result.redirectUrl; 
         } 
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         if (debug) { 
          alert(XMLHttpRequest.responseText); 
          alert(textStatus); 
          alert(errorThrown); 
         } 
        } 
});