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?



1
Mögliches Duplikat von ASP.Net MVC RedirectToAction mit Anker
GSerg

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


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");

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


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");
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.