Jak przekierować do akcji kontrolera z metody JSONResult w ASP.NET MVC?

Pobieram rekordy dla użytkownika na podstawie jego UserId jako JsonResult...

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

Jak przekierować do akcji kontrolera z metody JsonResult w asp.net mvc?Wszelkie sugestie...

EDIT: To chyba nie działa...

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 });
            }
Author: Chendur Pandian, 2010-05-19

5 answers

Będzie to zależało od sposobu wywołania tej akcji kontrolera. Jak używasz JSON przypuszczam, że nazywasz go w AJAX. W takim przypadku nie można przekierować z akcji kontrolera. Musisz to zrobić w wywołaniu zwrotnym success skryptu AJAX. Jednym ze sposobów jej osiągnięcia jest:

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

I w sukcesie:

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

Uwaga: Upewnij się, aby włączyć isRedirect = false w JSON w przypadku, gdy nie chcesz przekierować, który jest pierwszy przypadek w Twoim działanie kontrolera.

 55
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 12:11:56

Dodam do odpowiedzi Darina Dimitrowa. Na C#.NET MVC - jeśli chcesz przekierować do innej strony / kontrolera i chcesz wysłać obiekt / Model do nowego kontrolera, możesz zrobić coś takiego.

W metodzie JsonResult (w kontrolerze):

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

I w sukcesie:

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

I jeśli nowy kontroler może zaakceptować model / obiekt jak poniżej.. możesz przekazać obiekt do nowego kontrolera / strony

    public ActionResult Index(ErrorModel e)
    {
        return View(e);
    }
Mam nadzieję, że to pomoże.
 3
Author: bluwater2001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 21:45:16

Co myślisz o próbie połączenia:

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

Zamiast używać przekierowań?

 2
Author: 64X0P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-13 09:20:12

I jeśli pracujesz z obszarami ...

Kontroler:

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

Widok:

success: function (json) {

                           if (json.isRedirect) {
                           window.location.href = json.redirectUrl;
                           }
                        },
 1
Author: Mfilho_19,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 16:43:39

Nie ma sposobu, aby to zrobić, klient wykonuje skrypt AJAX, więc nie będzie w stanie obsłużyć niczego innego.

Proponuję przekierowanie w skrypcie klienta na podstawie zwróconych danych w funkcji callback.

Spójrz na podobne pytanie tutaj: http://bytes.com/topic/javascript/answers/533023-ajax-redirect

 0
Author: David Neale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 11:23:10