Redirection vers un hachage à partir du contrôleur à l'aide de «RedirectToAction»

87

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, lorsqu'elle est dirigée vers l'index, soit

http://localhost/Default/#region

Pour que

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

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

caché
la source

Réponses:

133

J'ai trouvé de cette façon:

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

gdoron soutient Monica
la source
1
Vous êtes un compagnon génial! Voici ce que j'ai fini de faire: return new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
masqué
1
+1 pour utiliser RedirectResult au lieu d'appeler la méthode Redirect (..). Dans MVC sous version et IIS6, vous pouvez vous retrouver avec des exceptions causées par la redirection car une demande est peut-être déjà redirigée, ou fait partie d'une action enfant, ou du contenu est déjà envoyé.
Jaans
2
Dans MVC 5, lors de l'utilisation de RedirectToAction, il semble échapper le # à un% 23. Personne d'autre ne vit cela?
jakejgordon
Pour moi, ça remonte quand j'utilise la même méthode.
Zeeshan Ahmad Khalil
14

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

De toute évidence, 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");
Bourrasque
la source
La première option fonctionne bien si votre action est dans un contrôleur différent.
Chad Hedgcock
9

Un moyen simple dans dot net core

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

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

Microsoft Docs - ControllerBase

Dermot
la source
4

Pour développer la réponse de Squall: L'utilisation de l'interpolation de chaîne permet d'obtenir un code plus propre. Cela fonctionne également pour les actions sur différents contrôleurs.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Jon T Royaume-Uni
la source