net mvc imagen icono icon con bootstrap asp asp.net-mvc routing redirect

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



layout mvc 5 (9)

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?


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

<input type="button" value="GO BACK" class="btn btn-primary" onclick="location.href=''@Request.UrlReferrer''" />

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"];


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<string, string>(k, formCollection[k])).ToList() .ForEach(p => parameters.Add(p.Key, p.Value)); } <!-- Option #1 --> @Html.ActionLink("Option #1", "Action", "Controller", parameters, null) <!-- Option #2 --> <a href="/Controller/Action/@[email protected](ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(), parameters)">Option #2</a> <!-- Option #3 --> <a href="@Url.Action("Action", "Controller", new { object.ID, returnUrl = Url.Action(ViewContext.RouteData.Values["action"].ToString(), ViewContext.RouteData.Values["controller"].ToString(), parameters) }, null)">Option #3</a>

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)


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


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


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"])) %> <% { %> <a href="<%= Request.QueryString["returnUrl"] %>">Return</a> <% } %>


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