Redirigir a un hash desde el controlador usando "RedirectToAction"

87

Hola, quiero devolver un ancla de Mvc Controller

Nombre del controlador = DefaultController;

public ActionResult MyAction(int id)
{
        return RedirectToAction("Index", "region")
}

Para que la URL cuando se dirija al índice sea

http://localhost/Default/#region

Así que eso

<a href=#region>the content should be focus here</a>

No pregunto si puede hacerlo así: ¿Cómo puedo agregar una etiqueta de anclaje a mi URL?

oculto
fuente

Respuestas:

133

Encontré de esta manera:

public ActionResult MyAction(int id)
{
    return new RedirectResult(Url.Action("Index") + "#region");
}

También puede utilizar esta forma detallada:

var url = UrlHelper.GenerateUrl(
    null,
    "Index",
    "DefaultController",
    null,
    null,
    "region",
    null,
    null,
    Url.RequestContext,
    false
);
return Redirect(url);

http://msdn.microsoft.com/en-us/library/ee703653.aspx

gdoron está apoyando a Monica
fuente
1
¡Eres un compañero genial! Aquí lo que terminé de hacer: return new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
oculto
1
+1 para usar RedirectResult en lugar de llamar al método Redirect (..). En MVC en versión e IIS6, puede terminar con excepciones causadas por la redirección porque quizás una solicitud ya se haya redireccionado, o sea parte de una acción secundaria, o el contenido ya se haya enviado.
Jaans
2
En MVC 5, cuando se usa RedirectToAction, parece escapar del # a% 23. ¿Nadie más está experimentando esto?
jakejgordon
Para mí, vuelve a subir cuando utilizo el mismo método.
Zeeshan Ahmad Khalil
14

Gran respuesta gdoron. Aquí hay otra forma que uso (solo para agregar a las soluciones disponibles aquí).

return Redirect(String.Format("{0}#{1}", Url.RouteUrl(new { controller = "MyController", action = "Index" }), "anchor_hash");

Obviamente, con la respuesta de gdoron, esto podría hacerse más limpio con lo siguiente en este simple caso;

return new RedirectResult(Url.Action("Index") + "#anchor_hash");
Chubasco
fuente
La primera opción funciona bien si su acción está en un controlador diferente.
Chad Hedgcock
9

Una forma sencilla de dot net core

public IActionResult MyAction(int id)
{
    return RedirectToAction("Index", "default", "region");
}

Lo anterior produce / default / index # region . El tercer parámetro es un fragmento que se agrega después de un #.

Microsoft docs - ControllerBase

Dermot
fuente
4

Para ampliar la respuesta de Squall: el uso de la interpolación de cadenas genera un código más limpio. También funciona para acciones en diferentes controladores.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Jon T Reino Unido
fuente