web-dev-qa-db-fra.com

Rediriger vers un hachage à partir du contrôleur en utilisant "RedirectToAction"

Bonjour, je veux retourner une ancre de Mvc Controller

Nom du contrôleur = DefaultController;

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

Pour que l'URL dirigée vers l'index soit

http://localhost/Default/#region

Pour que

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

Je ne demande pas si vous pouvez le faire comme ceci: Comment puis-je ajouter une balise d'ancrage à mon URL?

82
hidden

J'ai trouvé ça:

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

Vous pouvez également utiliser cette méthode détaillée:

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

127
gdoron

Grande réponse gdoron. Voici une autre façon que j'utilise (juste pour ajouter aux solutions disponibles ici).

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

Évidemment, avec la réponse de gdoron, cela pourrait être rendu plus propre avec ce qui suit dans ce cas simple;

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

Un moyen simple en dot net core

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

Les données ci-dessus produisent /default/index # region . Le 3ème paramètre est le fragment qu'il ajoute après un #.

Microsoft docs - ControllerBase

4
Dermot

Pour développer la réponse de Squall: l'utilisation de l'interpolation de chaîne permet de nettoyer le code. Il fonctionne également pour les actions sur différents contrôleurs.

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