web-dev-qa-db-fra.com

ASP.NET Core 2: comment rediriger vers la page avec la zone?

RedirectToPage("Companies") redirigera vers /Pages/Companies.cshtml (à partir d'un contrôleur ASP.NET MVC)

Mais que faire si vous voulez rediriger vers cette page /Areas/MyArea/Pages/Companies.cshtml?

Tous ceux-là et bien d'autres ne fonctionnent pas:

RedirectToPage("/MyArea/Companies.cshtml") 
RedirectToPage("MyArea/Companies.cshtml") 
RedirectToPage("./MyArea/Companies.cshtml") 
RedirectToPage("/MyArea/Companies") 
RedirectToPage("MyArea/Companies") 
RedirectToPage("./MyArea/Companies") 

Parfois, j'obtiens l'erreur "Page non trouvée". Parfois, obtenez "Spécifiez un chemin relatif racine avec un '/' en tête pour générer une URL en dehors d'une page Razor". Il n'y a pas de dossier Pages. Je sais que tout cela peut changer à nouveau toutes les règles.

P.S. Pages Razor configurées avec .SetCompatibilityVersion (CompatibilityVersion.Version_2_1); aucun routage spécifique ajouté.

10
Roman Pokrovskij

Utilisez le surcharge de RedirectToPage qui prend un objet représentant RouteValues :

return RedirectToPage("/Companies", new { area = "MyArea" });

Notez que le '/' est requis si vous utilisez RedirectToPage dans un contrôleur (ou n'importe où en dehors d'une page Razor). Sinon, il n'est pas nécessaire (mais fonctionnera toujours).

19
Mike Brind

Cela fonctionne pour moi:

return RedirectToPage("/Companies", new { area = "MyArea" });

Fonctionne sous plain .SetCompatibilityVersion(CompatibilityVersion.Version_2_1); aucun routage spécifique configuré.

Je pense que ce sera une question populaire ... Merci à Mike Bring, il me montre un chemin.

P.S. Si vous avez un dossier Pages - toutes les règles seront modifiées une fois de plus. C'est ainsi que "Razor Pages" essaient de s'épuiser de "MVC magic"

0
Roman Pokrovskij