2012-05-21 9 views
73

Hola quiero devolver un ancla de MVC controladorredirigir a un hash del controlador usando "RedirectToAction"

controlador nombre = defaultController;

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

Para que la URL cuando se dirige al índice es

http://localhost/Default/#region 

Para que

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

No estoy pidiendo si puede hacerlo de esta manera: How can I add an anchor tag to my URL?

+0

http://stackoverflow.com/questions/7904835/how-can-i-add-an-anchor-tag-to-my-url – DevDave

Respuesta

115

I encontrado de esta manera:

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

También puede utilizar esta forma prolija:

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

+1

Usted es un compañero de genio! Aquí lo que terminé haciendo: devolver un nuevo RedirectResult (Url.Action ("Index", nuevo {PKMvrEmployeeId = MvrId}) + "#region"); – hidden

+1

+1 para usar RedirectResult en lugar de llamar al método Redirect (..). En MVC bajo versión e IIS6 puede terminar con excepciones causadas por el redireccionamiento porque quizás ya se redirigió una solicitud, o parte de una acción secundaria, o el contenido ya se envió. – Jaans

+0

Esa es la solución más limpia que he visto hasta ahora. Gracias gdoron – Vincent

12

Gran respuesta gdoron. Aquí hay otra manera 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, la respuesta de gdoron esto podría hacerse un limpiador con lo siguiente en este caso simple;

return new RedirectResult(Url.Action("Index") + "#anchor_hash"); 
+0

La primera opción funciona bien si su acción está en un controlador diferente. –

3

Expandir en la respuesta de Squall: El uso de la interpolación de cadenas hace que el código sea más limpio. También funciona para acciones en diferentes controladores.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor"); 
Cuestiones relacionadas