Mit "RedirectToAction" vom Controller zu einem Hash umleiten

87

Hallo, ich möchte einen Anker von Mvc Controller zurückgeben

Controller-Name = DefaultController;

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

Damit ist die URL, wenn an den Index gerichtet,

http://localhost/Default/#region

Damit

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

Ich frage nicht, ob Sie das so machen können: Wie kann ich meiner URL ein Ankertag hinzufügen?

versteckt
quelle

Antworten:

132

Ich habe diesen Weg gefunden:

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

Sie können auch diese ausführliche Methode 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

Gdoron unterstützt Monica
quelle
1
Du bist ein genialer Kumpel! Hier ist, was ich getan habe: return new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
versteckt
1
+1 für die Verwendung von RedirectResult anstelle des Aufrufs der Redirect (..) -Methode. In MVC unter Release und IIS6 können Ausnahmen auftreten, die durch die Umleitung verursacht werden, da eine Anforderung möglicherweise bereits umgeleitet wurde oder Teil einer untergeordneten Aktion ist oder Inhalte bereits gesendet wurden.
Jaans
2
In MVC 5 scheint bei Verwendung von RedirectToAction das # auf% 23 zu maskieren. Erlebt das sonst niemand?
Jakejgordon
Für mich geht es wieder hoch, wenn ich die gleiche Methode verwende.
Zeeshan Ahmad Khalil
14

Tolle Antwort, Gdoron. Hier ist eine andere Möglichkeit, die ich verwende (nur um die verfügbaren Lösungen hier zu ergänzen).

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

Offensichtlich könnte mit der Antwort von gdoron dies in diesem einfachen Fall mit dem Folgenden sauberer gemacht werden;

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

quelle
Die erste Option funktioniert gut, wenn sich Ihre Aktion in einem anderen Controller befindet.
Chad Hedgcock
9

Ein einfacher Weg im Punktnetzkern

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

Die oben genannten Erträge / Standard / Index # Region . Der dritte Parameter ist ein Fragment, das nach einem # hinzugefügt wird.

Microsoft-Dokumente - ControllerBase

Dermot
quelle
4

So erweitern Sie die Antwort von Squall: Die Verwendung der Zeichenfolgeninterpolation sorgt für saubereren Code. Es funktioniert auch für Aktionen auf verschiedenen Controllern.

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