Cómo redirigir a una acción del controlador desde un método JsonResult en ASP.NET ¿MVC?


Estoy buscando registros para un usuario basado en su UserId como un 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");
   }
}

Cómo redirigir a una acción de controlador desde un método JsonResult en asp.net ¿mvc?Cualquier sugerencia...

EDITAR: Esto no parece funcionar...

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

Esto dependerá de cómo invoque esta acción del controlador. Como estás usando JSON supongo que lo estás llamando en AJAX. Si este es el caso, no puede redirigir desde la acción del controlador. Tendrá que hacer esto en la devolución de llamada success del script AJAX. Una forma de lograrlo es la siguiente:

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

Y en la devolución de llamada de éxito:

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

Observación: Asegúrese de incluir isRedirect = false en el JSON en caso de que no desee redirigir, que es el primer caso en su acción del controlador.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-19 12:11:56

Añadiendo a la respuesta de Darin Dimitrov. Para C#.NET MVC - Si desea redirigir a una página/controlador diferente y desea enviar un Objeto / Modelo al nuevo controlador, puede hacer algo como esto.

En el método JsonResult (en el controlador):

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

Y en la devolución de llamada de éxito:

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

Y si el nuevo controlador puede aceptar el modelo/objeto como a continuación.. puede pasar el objeto al nuevo controlador/página

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

Espero que esto ayude.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-27 21:45:16

¿Qué piensas acerca de tratar de llamar:

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

En lugar de usar redirecciones?

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-13 09:20:12

Y si trabajas con áreas ...

Controlador:

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;
                           }
                        },
 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-08 16:43:39

No hay manera de hacer esto, el cliente está ejecutando un script AJAX por lo que no será capaz de manejar nada más.

Le sugiero que redirija en el script de cliente basado en los datos devueltos en la función de devolución de llamada.

Echa un vistazo a una pregunta similar aquí: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-19 11:23:10