2012-05-21 5 views
73

Hallo Ich möchte einen Anker von Mvc-Controller zurückzukehrenauf einen Hash von der Steuerung mit "RedirectToAction"

-Controller name = default;

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

Damit die URL, wenn zum Index gerichtet ist

http://localhost/Default/#region 

Damit

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

ich nicht frage mich, ob Sie es wie folgt tun: 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

Antwort

115

I gefunden auf diese Weise:

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

Sie können auch diese ausführliche Art und Weise verwenden:

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

Sie sind ein genialer Kumpel! Hier was ich beendet habe: return new RedirectResult (Url.Action ("Index", neu {PKMvrEmployeeId = MvrId}) + "#region"); – hidden

+1

+1 für die Verwendung von RedirectResult anstelle von Redirect (..) -Methode. In MVC unter Release und IIS6 können Sie durch Umleitungen verursachte Ausnahmen verursachen, da eine Anforderung möglicherweise bereits umgeleitet wurde oder ein Teil einer untergeordneten Aktion oder der Inhalt bereits gesendet wurde. – Jaans

+0

Das ist die sauberste Lösung, die ich bisher gesehen habe. Danke gdoron – Vincent

12

Große Antwort gdoron. Hier ist eine andere Art, die ich verwende (nur um die verfügbaren Lösungen hier hinzuzufügen).

Offensichtlich mit gdoron Antwort könnte dies mit dem folgenden in diesem einfachen Fall ein Reiniger gemacht werden;

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

Die erste Option funktioniert gut, wenn sich Ihre Aktion in einem anderen Controller befindet. –

3

Um auf Squall's Antwort zu erweitern: Die Verwendung von String-Interpolation sorgt für saubereren Code. Es funktioniert auch für Aktionen auf verschiedenen Controllern.

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