net mvc multiple form buttons asp asp.net-mvc redirecttoaction jsonresult

asp.net-mvc - multiple - mvc submit button action



¿Cómo redireccionar a una acción del controlador desde un método JSONResult en ASP.NET MVC? (5)

Estoy recuperando registros para un usuario basado en su UserId como 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 del controlador desde un método JsonResult en asp.net mvc? Cualquier sugerencia ...

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


¿Qué hacer para pensar en tratar de llamar:

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

¿En lugar de usar redirecciones?


Añadiendo a la respuesta de Darin Dimitrov. Para C # .NET MVC: si desea redireccionar 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 se muestra a continuación ... puede pasar el objeto al nuevo controlador / página

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

Espero que esto ayude.


Esto dependerá de cómo invoque esta acción del controlador. Mientras utiliza JSON, supongo que lo está 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; } }

Nota: asegúrese de incluir isRedirect = false en el JSON en caso de que no quiera redirigir cuál es el primer caso en la acción de su controlador.


No hay forma de hacerlo, el cliente está ejecutando un script AJAX, por lo que no podrá manejar nada más.

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

Eche un vistazo a una pregunta similar aquí: http://bytes.com/topic/javascript/answers/533023-ajax-redirect


Y si trabajas con áreas ...

Controlador:

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

Ver:

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