¿Cómo redirecciono a la acción anterior en ASP.NET MVC?

Supongamos que tengo algunas páginas

  • some.web/articles/details/5
  • some.web/users/info/bob
  • some.web/foo/bar/7

que puede llamar a un controlador de utilidad común como

locale/change/es o authorization/login

¿Cómo obtengo estos métodos ( change , login ) para redirigirlos a las acciones previas ( details , info , bar ) mientras les paso los parámetros previos ( 5 , bob , 7 )?

En resumen: ¿cómo puedo redireccionar a la página que acabo de visitar después de realizar una acción en otro controlador?

tratar:

 public ActionResult MyNextAction() { return Redirect(Request.UrlReferrer.ToString()); } 

alternativamente, tocando lo que dijo Darin, intente esto:

 public ActionResult MyFirstAction() { return RedirectToAction("MyNextAction", new { r = Request.Url.ToString() }); } 

entonces:

 public ActionResult MyNextAction() { return Redirect(Request.QueryString["r"]); } 

Si desea redirigir desde un botón en la vista, puede usar:

 @Html.ActionLink("Back to previous page", null, null, null, new { href = Request.UrlReferrer}) 

Si no le interesan las pruebas unitarias, simplemente puede escribir:

 return Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString()); 

Una sugerencia de cómo hacer esto de manera que:

  1. la URL de retorno sobrevive la solicitud POST de un formulario (y cualquier validación fallida)
  2. la URL de retorno se determina a partir de la URL de referencia inicial
  3. sin usar TempData [] u otro estado del lado del servidor
  4. maneja la navegación directa a la acción (proporcionando una redirección predeterminada)

.

 public ActionResult Create(string returnUrl) { // If no return url supplied, use referrer url. // Protect against endless loop by checking for empty referrer. if (String.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null && Request.UrlReferrer.ToString().Length > 0) { return RedirectToAction("Create", new { returnUrl = Request.UrlReferrer.ToString() }); } // Do stuff... MyEntity entity = GetNewEntity(); return View(entity); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(MyEntity entity, string returnUrl) { try { // TODO: add create logic here // If redirect supplied, then do it, otherwise use a default if (!String.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl); else return RedirectToAction("Index"); } catch { return View(); // Reshow this view, with errors } } 

Podría usar el redireccionamiento dentro de la vista de esta manera:

 <% if (!String.IsNullOrEmpty(Request.QueryString["returnUrl"])) %> <% { %> ">Return <% } %> 

Pase un parámetro returnUrl (url codificado) a las acciones de cambio e inicio de sesión y dentro de redirigir a este returnUrl dado. Su acción de inicio de sesión puede ser similar a esto:

 public ActionResult Login(string returnUrl) { // Do something... return Redirect(returnUrl); } 

En Mvc usando html simple en la página de visualización con el script java onclick

  

Esto funciona genial la esperanza ayuda a alguien

@JuanPieterse ya ha respondido usando @Html.ActionLink así que, si es posible, alguien puede comentar o responder usando @Url.Action

Estoy usando .Net Core 2 MVC, y este me funcionó, en el controlador usa HttpContext.Request.Headers["Referer"];

Puede volver a la página anterior utilizando la propiedad ViewBag.ReturnUrl .

Para construir dinámicamente el returnUrl en cualquier vista, intente esto:

 @{ var formCollection = new FormCollection { new FormCollection(Request.Form), new FormCollection(Request.QueryString) }; var parameters = new RouteValueDictionary(); formCollection.AllKeys .Select(k => new KeyValuePair(k, formCollection[k])).ToList() .ForEach(p => parameters.Add(p.Key, p.Value)); }  @Html.ActionLink("Option #1", "Action", "Controller", parameters, null)  Option #2  Option #3 

Esto también funciona en las páginas de diseño, vistas parciales y Html Helpers

Relacionado: MVC3 Dynamic Return URL (Igual pero desde dentro de cualquier Controlador / Acción)