2017-12-20 6 views
1

Ich versuche, meine Ansicht von der Steuerung neu zu laden, um in TempData gespeicherten Daten nach einem AJAX POST-Aufruf an meinen Controller anzuzeigen. Das Problem ist, dass mein Aufruf der Methode RedirectToAction nichts umleitet.ASP.NET MVC RedirectToAction funktioniert nicht nach AJAX Post aus Sicht

Hier einige Code-Beispiele

Ausblick:

$('#incidentTableBody').on('click', 'button.relayBack', function() { 
      Post('/Incident/RelayBack', { incidentId: $(this).parent().parent().data('id'), ownerId: $(this).parent().parent().data('ownerid') }, function() { }); 
     }); 

    function Post(action, data, callback) { 
      $.ajax({ 
       url: action, 
       type: "POST", 
       data: data, 
       //error: function (jqXHR, textStatus, errorThrown) { 
       // console.log(errorThrown); 
       //}, 
       success: callback, 
       cache: false 
      }); 
     } 

Controller:

[Authorize] 
    public ActionResult IncidentList() 
    { 
     ViewBag.Title = "IncidentList"; 
     return View(); 
    } 

    [HttpPost] 
    [Authorize] 
    public ActionResult RelayBack(string incidentId, string ownerId) 
    { 
     bool success; 
     try 
     { 
      new Guid(_incidentService.RelayBack(new Guid(incidentId), new Guid(ownerId))); 
      success = true; 
     } 
     catch 
     { 
      success = false; 
     } 

     if (success) 
     { 
      TempData["Message"] = "Le ticket a bien été relancé par l'équipe support"; 
      TempData["Class"] = "alert-success"; 
     } 
     else 
     { 
      TempData["Message"] = "Une erreur est survenue lors de la relance de l'incident"; 
      TempData["Class"] = "alert-warning"; 
     } 

     return RedirectToAction("IncidentList"); // TODO : redirect doesn't work 
    } 

Meine Arbeiten AJAX-Aufruf und fordert meinen Controller, dann alle Anweisungen meiner Controller-Methode, aber die letzten (Umleitung) korrekt ausgeführt werden. Die letzte, RedirectToAction, ruft tatsächlich IncidentList() auf, die meine Ansicht zurückgeben soll, aber nichts passiert.

Ich habe versucht RedirectToAction mit Ansicht zu ersetzen, Umleitung ... nichts besser passiert ist. Ich habe versucht, von meinem AJAX-Erfolg Callback-Funktion neu zu laden, aber das Verhalten war nicht, was ich erwartet hatte, und ich bevorzuge es von meinem Controller zu tun.

Ich habe bereits das gleiche getan (ein RedirectToAction Aufruf meine Seite neu zu laden und TempData gespeicherte Daten anzuzeigen) in meiner App, aber nach einem Formular POST Einreichung und nicht ein AJAX Anruf, könnte es (AJAX) die Quelle des sein Problem?

+0

Der ganze Sinn von Ajax ist es, auf der ** gleichen ** Seite zu bleiben. Ajax-Anrufe werden niemals umgeleitet. Wenn Sie umleiten möchten, verwenden Sie KEINEN AJAX. –

Antwort

0

so möchten Sie Ihre Seite nach dem Post umleiten.

ändern Sie Ihre Rückkehrmethode zu Json.

return Json(new { redirectToUrl = Url.Action("action", "contoller") }); 

Und OnSuccess Ajax

success: function (response) { 
       window.location.href = response.redirectToUrl; 
      } 

Das ist es.

0

Verwenden Sie in Ajax-Aufruf "window.location = redirectUrl", um auf eine bestimmte Seite in der Erfolgsmethode anstelle des Callbacks umzuleiten.

Verwandte Themen