2010-05-19 11 views
23

record sto recupero per un utente in base alla sua UserId come JsonResult ...Come reindirizzare a un'azione del controller da un metodo JSONResult in ASP.NET MVC?

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"); 
    } 
} 

Come reindirizzare ad un'azione di controllo da un metodo JsonResult in asp.net mvc? Qualsiasi suggerimento ...

EDIT: questo non sembra funzionare ...

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 }); 
      } 

risposta

53

Questo dipenderà da come si sta invocando l'azione del controller. Siccome stai usando JSON suppongo che tu lo chiami in AJAX. In questo caso non è possibile reindirizzare dall'azione del controller. Dovrai eseguire questa operazione nella callback success dello script AJAX. Un modo per raggiungerlo è la seguente:

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

E nel callback successo:

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

Nota: Assicurati di includere isRedirect = false nel JSON nel caso in cui non si vuole reindirizzare quali è il primo caso nell'azione del controller.

+0

sto usando jQuery.ajax() ... –

+1

'redirectUrl' non esiste nel contesto corrente ... –

+0

Io reindirizzo sempre con AJAX, ma quando utilizzo le raccolte di campi modulo postate, non quando si usa JSON. Infatti, sto cercando di rintracciare un bug che riguarda il reindirizzamento con i dati pubblicati da JSON in questo momento: http://stackoverflow.com/questions/4110889/asp-net-mvc-2-losing-authorization-when-redirecttoaction- with-json-data Sembra che questo non è qualcosa che posso fare allora, sì? – kdawg

0

non c'è modo di fare questo, il cliente è l'esecuzione di uno script AJAX, quindi non sarà in grado t o gestisci qualsiasi altra cosa.

Suggerisco di reindirizzare nello script client in base ai dati restituiti nella funzione di callback.

Date un'occhiata a una domanda simile qui: http://bytes.com/topic/javascript/answers/533023-ajax-redirect

2

Cosa ne pensi cercando di chiamare:

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

invece di utilizzare i reindirizzamenti?

3

In aggiunta alla risposta di Darin Dimitrov. Per C# .NET MVC: se si desidera reindirizzare a una pagina/controller diversa e si desidera inviare un oggetto/modello al nuovo controller, è possibile eseguire operazioni come questa.

Nel metodo JsonResult (nel controllore):

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 
}); 

E nel callback successo:

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

E se il nuovo controller può accettare il modello/oggetto come di seguito .. si può passare l'oggetto al nuovo controller/pagina

public ActionResult Index(ErrorModel e) 
    { 
     return View(e); 
    } 

Spero che questo aiuti.

1

E se si lavora con le aree ...

Controller:

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

Vista:

success: function (json) { 

          if (json.isRedirect) { 
          window.location.href = json.redirectUrl; 
          } 
         }, 
Problemi correlati