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?



1
Copie

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


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

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


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");
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.