2012-05-21 19 views
73

Ciao voglio tornare un ancoraggio da MVC controllerreindirizzano a un hash dal controller utilizzando "RedirectToAction"

nome controller = DefaultController;

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

modo che l'URL quando diretta a indice è

http://localhost/Default/#region 

In modo che

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

Io non sto chiedendo se si può fare in questo modo: 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

risposta

115

I trovato in questo modo:

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

È anche possibile utilizzare questo modo verbose:

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

Sei un compagno genio! Ecco cosa ho concluso facendo: restituire nuovo RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region"); – hidden

+1

+1 per l'utilizzo di RedirectResult anziché chiamare il metodo Redirect (..). In MVC in versione e IIS6 è possibile terminare con eccezioni causate dal reindirizzamento perché una richiesta è già stata reindirizzata o parte di un'azione figlio o il contenuto è già stato inviato. – Jaans

+0

Questa è la soluzione più pulita che ho visto finora. Grazie gdoron – Vincent

12

Grande risposta gdoron. Ecco un altro modo che uso (solo per aggiungere alle soluzioni disponibili qui).

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

Ovviamente, con la risposta di gdoron questo potrebbe essere reso più pulito con quanto segue in questo semplice caso;

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

La prima opzione funziona bene se la tua azione è in un controller diverso. –

3

Per espandere la risposta di Squall: l'uso di un'interpolazione di stringa consente di ottenere un codice più pulito. Funziona anche per azioni su diversi controller.

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