2010-05-19 4 views
23

Ich Abrufen Aufzeichnungen für einen Benutzer auf der Grundlage seiner UserId als JsonResult ...Wie zu einer Controller-Aktion von einer JSONResult-Methode in ASP.NET MVC umgeleitet werden?

public JsonResult GetClients(int currentPage, int pageSize) 
{ 
    if (Session["UserId"] != "") 
    { 
     var clients = clirep.FindAllClients().AsQueryable(); 
     var count = clients.Count(); 
     var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize); 
     var genericResult = new { Count = count, Results = results }; 
     return Json(genericResult); 
    } 
    else 
    { 
     //return RedirectToAction("Index","Home"); 
    } 
} 

Wie eine Controller-Aktion von einem JsonResult Verfahren in asp.net Mvc? Jeder Vorschlag ...

umleiten

EDIT: Dies nicht zu funktionieren scheint ...

if (Session["UserId"] != "") 
      { 
       var clients = clirep.FindAllClients().AsQueryable(); 
       var count = clients.Count(); 
       var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize); 
       var genericResult = new { Count = count, Results = results ,isRedirect=false}; 
       return Json(genericResult); 
      } 
      else 
      { 
       return Json({redirectUrl = Url.Action("Index", "Home"), isRedirect = true }); 
      } 

Antwort

53

Dies hängt davon ab, wie Sie diese Controller-Aktion sind aufgerufen wird. Da Sie JSON verwenden, nehme ich an, dass Sie es in AJAX aufrufen. Wenn dies der Fall ist, können Sie nicht von der Controller-Aktion umleiten. Sie müssen dies im success Callback des AJAX-Skripts tun. Eine Möglichkeit, dies zu erreichen ist die folgende:

return Json(new 
{ 
    redirectUrl = Url.Action("Index", "Home"), 
    isRedirect = true 
}); 

Und für den Erfolg Rückruf:

success: function(json) { 
    if (json.isRedirect) { 
     window.location.href = json.redirectUrl; 
    } 
} 

Anmerkung: Stellen Sie sicher, isRedirect = false im JSON, falls enthalten, die Sie wollen nicht umleiten was der erste Fall in Ihrer Controller-Aktion.

+0

i jquery bin mit.ajax() ... –

+1

'redirectUrl' existiert nicht im aktuellen Kontext ... –

+0

Ich umadressiere ständig mit AJAX, aber bei der Verwendung von gebuchten Formularfeldsammlungen, nicht bei Verwendung von JSON. In der Tat versuche ich jetzt einen Fehler zu finden, der die Umleitung mit JSON-geposteten Daten betrifft: http://stackoverflow.com/questions/4110889/asp-net-mvc-2-losing-authorization-when-redirecttoaction- with-json-data Es hört sich so an, als könnte ich das nicht tun, ja? – kdawg

0

keine Möglichkeit, dies zu tun, wird der Client einen AJAX-Skript ausgeführt, um nicht in der Lage t sein Behandle alles andere.

Ich schlage vor, Sie im Client-Skript basierend auf den zurückgegebenen Daten in der Callback-Funktion umleiten.

Werfen Sie einen Blick auf eine ähnliche Frage hier: http://bytes.com/topic/javascript/answers/533023-ajax-redirect

2

Was zu tun, denken Sie versuchen zu nennen:

Umleitungen
return (new YourOtherController()).JSONResultAction(); 

anstelle von?

3

Hinzufügen zu Darin Dimitrovs Antwort. Für C# .NET MVC - Wenn Sie auf eine andere Seite/einen anderen Controller umleiten und ein Objekt/Modell an den neuen Controller senden möchten, können Sie so etwas tun.

In JsonResult-Methode (in der Steuerung):

ErrorModel e = new ErrorModel(); 
      e.ErrorTitle = "Error"; 
      e.ErrorHeading = "Oops ! Something went wrong."; 
      e.ErrorMessage = "Unable to open Something"; 



return Json(new 
{ 
    redirectUrl = Url.Action("Index", "Home",e), 
    isRedirect = true 
}); 

Und für den Erfolg Rückruf:

success: function(json) { 
    if (json.isRedirect) { 
     window.location.href = json.redirectUrl; 
    } 
} 

Und wenn der neue Controller unter dem Modell/Objekt annehmen kann wie .. Sie kann das Objekt an den neuen Controller übergeben/Seite

Hope dies hilft.

1

Und wenn Sie mit Bereichen arbeiten ...

Controller:

return Json(new 
     { 
      redirectUrl = Url.Action("Index", "/DisparadorProgSaude/", new { area = "AreaComum" }), 
      isRedirect = true 
     }); 

Ausblick:

success: function (json) { 

          if (json.isRedirect) { 
          window.location.href = json.redirectUrl; 
          } 
         }, 
Verwandte Themen